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

时间:2015-03-12 02:15:28

标签: 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 ++ /软件工程的角度来理解这个类的设计。

2 个答案:

答案 0 :(得分:3)

circular_buffer_fwd.hpp标头负责设置默认分配器

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

答案 1 :(得分:3)

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

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标题中。如果平台没有,则宏评估为std::allocator<T>或等效。