c++ - 这种 rebind_alloc 的使用是错误的吗?

标签 c++ templates boost boost-asio

在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>>

最佳答案

没关系。 allocate_shared 的规范说:

The allocate_shared templates use a copy of a (rebound for an unspecified value_type) to allocate memory.

函数永远不会直接分配指针对象;它通常分配一个带有嵌入式指针的 shared_ptr 控制 block 。因此,您通过的任何分配无论如何都必须被反弹。

重新绑定(bind)到 char 的优点是它更短,并且不必针对所使用的类型进行调整。 (int 可能更短,但 char 有时被理解为“原始内存”。)程序员。

关于c++ - 这种 rebind_alloc 的使用是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49093979/

相关文章:

c++ - std::function 的工作原理

c++ - 尝试将 sfml 和 c++ 与 Windows 10 上的可移植 vscode 链接起来

c++ - QQuickItem 不会渲染

c++ - 如何编译非类型模板参数?

读取文本文件的 C++ 类 - 出现错误

c++ - 我可以在编译时使用一个常量来选择一个类,可能使用模板吗?

c++ - 嵌套类型的重载运算符

c++ - 在一行中创建一个前缀序列

c++ - Boost ICL 未按预期工作,std::set operator+= expected

python - 在 boost.python 中使用它时不能在我的抽象类中使用纯虚函数