gpt4 book ai didi

c++ - allocator::get_deleter() 应该是 const 合格的吗?

转载 作者:行者123 更新时间:2023-11-30 05:03:49 25 4
gpt4 key购买 nike

我试图为我的无锁分配器类模板提供一个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,也避免了 const_cast()

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

最佳答案

不要const_cast<allocator &>(*this)

你不知道是否有人会拥有 const allocator<...>值并获得未定义的行为。即使你不这样做,你也是在撒谎 const确实如此。

allocator::get_deleter 不能const没有 const_cast ,所以它不应该

See it live

关于c++ - allocator::get_deleter() 应该是 const 合格的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49254880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com