C++ 分配器::get_deleter()是否应该是const限定的?

C++ 分配器::get_deleter()是否应该是const限定的?,c++,constants,api-design,allocator,C++,Constants,Api Design,Allocator,我试图为我的无锁分配器类模板(代码为)提供一个get\u deleter()。删除器类似于 模板 结构删除器{ 分配器&alloc; void运算符()(T*p)常量noexcept{ p->~T(); 分配解除分配(p); } }; 请注意,alloc不应该是const,因为deallocate()不是const,这与。现在,我不确定我的分配器::get\u deleter()是否应该是const。困境如下: 1。常量的基本原理:方法本身不会修改*此,并且是线程安全的(另请参阅) 2。不成为

我试图为我的无锁分配器类模板(代码为)提供一个
get\u deleter()
。删除器类似于

模板
结构删除器{
分配器&alloc;
void运算符()(T*p)常量noexcept{
p->~T();
分配解除分配(p);
}
};
请注意,
alloc
不应该是
const
,因为
deallocate()
不是
const
,这与。现在,我不确定我的
分配器::get\u deleter()
是否应该是
const
。困境如下:

1。
常量的基本原理:方法本身不会修改
*此
,并且是线程安全的(另请参阅)

2。不成为
常量的基本原理:该方法返回一个
删除程序
,可用于修改
*此
。还避免了在方法为
const
时所需的
const\u cast()


有什么建议或想法吗?就我个人而言,我赞成
const

不要
const\u cast

我个人赞成这个意图,并且不将它标记为
const
,如果将它标记为
const
意味着我可以删除一个const对象而不会得到任何警告。听起来不像是我想允许的。也许两者都提供?@spectras,但您可以调用
常量
对象的析构函数,对吗?但是,
operator delete()
不接受
const
指针。多么进退两难:(这是一个明确的例外:“可以为const、volatile或const-volatile对象调用析构函数。[…]const和volatile语义不应用于正在销毁的对象”请看@spectras,我认为这个例外也应该适用于释放,否则
const
对象的内存无法回收。
deleter
只做这两件事:销毁和释放。我理解你的意思。确实可以删除const对象。事实上,你的deleter正在运行析构函数用于证明销毁异常的相同论点确实适用。这已在问题中作为非常量的pro进行了讨论。编辑为更具体。仅仅因为
const\u cast
存在,并不意味着您应该使用它