c++ - 构造函数在哪里获取/设置默认分配器?

标签 c++ boost

关于 boost::circular_buffer类,

我可以如下实例化一个简单的:

#include<boost/circular_buffer.hpp>
int main() {
  boost::circular_buffer<double> buffer;
}

circular_buffer 类模板化为

template<typename T, typename Alloc>
class circular_buffer {
  ... 
  typedef Alloc allocator_type;
  ...
}

我相信被调用的构造函数是

explicit circular_buffer(const allocator_type & = allocator_type()) noexcept;

我不明白的是哪里buffer正在获取其默认分配器?文档指出,如果未明确提供,默认 Alloc 对象是一个 std::allocator<T>。 ,但我看不到这是在哪里设置的。我不是想改变它,我只是想从 c++/软件工程的角度理解这个类的设计。

最佳答案

该类接收分配器类型作为模板参数:

template<typename T, typename Alloc> 
class circular_buffer {

并且构造函数参数只是默认构造该类型的一个实例。

如果您使用 circular_buffer没有指定 Alloc模板参数它使用基本模板声明中指定的默认值:

template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)>
class circular_buffer;

这隐藏在 circular_buffer_fwd.hpp 中 header 。宏的计算结果为 std::allocator<T>或等效的(如果平台没有)。

关于c++ - 构造函数在哪里获取/设置默认分配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29000797/

相关文章:

c++ - 在 CPU 上模拟 OpenGL 纹理映射以进行重投影

c++ - 位图文件图像数据偏移产生不同图像

c++ - 每次使用不同的 fixture 多次执行一个测试用例

C++ Boost类内的多线程

c++ - 哥德巴赫猜想程序编写中的问题

c++ - 模板化类参数重载

c++ - 获取网格中心的屏幕位置

c++ - 如何知道 Boost asio 中 SSL 套接字的状态

c++ - 现在我可以替换所有 Date 类吗?

c++ boost模板类型和非类型