使用 rebind_alloc 是一个错误吗?
Posted
技术标签:
【中文标题】使用 rebind_alloc 是一个错误吗?【英文标题】:Is this use of rebind_alloc an error? 【发布时间】:2018-03-04 09:39:20 【问题描述】:在 boost.asio 的官方示例中,我找到了以下代码:
template <class Func, class Alloc>
void post(Func f, const Alloc& a) const
auto p(std::allocate_shared<item<Func>>(
typename std::allocator_traits<
Alloc>::template rebind_alloc<char>(a),
priority_, std::move(f)));
std::lock_guard<std::mutex> lock(context_.mutex_);
context_.queue_.push(p);
context_.condition_.notify_one();
是否应该将rebind_alloc<char>
修改为rebind_alloc<item<Func>>
?
【问题讨论】:
【参考方案1】:没关系。 allocate_shared
的规范说:
allocate_shared
模板使用a
的副本(对未指定的value_type
进行反弹)来分配内存。
无论如何,该函数从不直接分配指针;它通常分配一个带有嵌入式指针对象的 shared_ptr 控制块。因此,您通过的任何分配都必须被反弹。
重新绑定到char
的优点是它更短,并且不必针对所使用的类型进行调整。 (int
可能更短,但 char
有时被理解为“原始内存”。)重新绑定到指针类型的优点是它不会让其他程序员感到困惑。
【讨论】:
以上是关于使用 rebind_alloc 是一个错误吗?的主要内容,如果未能解决你的问题,请参考以下文章
在库中使用 CMake "set(XXXX CACHE ...)" 是一个错误吗?