我试图为我的无锁分配器类模板提供get_deleter()
(代码为here)。删除器就像
template <typename T>
struct deleter {
allocator<T>& alloc;
void operator()(T* p) const noexcept {
p->~T();
alloc.deallocate(p);
}
};
请注意,alloc
不应为const
,因为deallocate()
不是const
,与std::allocator::deallocate()
一致。现在,我不确定我的allocator::get_deleter()
是否应为const
。困境如下:
1。成为const
的基本原理:该方法本身并不修改*this
,并且是线程安全的(另请参阅Does const mean thread-safe in C++11?)。
2。不是const
的基本原理:该方法返回deleter
,可用于修改*this
。如果方法为const_cast()
,也可以避免使用const
。
有任何建议或想法吗?就个人而言,我赞成const
。
答案 0 :(得分:1)
const_cast<allocator &>(*this)
您不知道是否有人会有const allocator<...>
值并获得未定义的行为。即使你没有,你也在谎言const
它是如何形成的。
allocator::get_deleter
在没有const
的情况下不能const_cast
,因此不应该。< / p>