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

idW*_*ter 5 c++ boost

关于boost :: circular_buffer类,

我能够实例化一个简单的如下:

#include<boost/circular_buffer.hpp>
int main() {
  boost::circular_buffer<double> buffer;
}
Run Code Online (Sandbox Code Playgroud)

circular_buffer类被模板化了

template<typename T, typename Alloc>
class circular_buffer {
  ... 
  typedef Alloc allocator_type;
  ...
}
Run Code Online (Sandbox Code Playgroud)

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

explicit circular_buffer(const allocator_type & = allocator_type()) noexcept;
Run Code Online (Sandbox Code Playgroud)

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

seh*_*ehe 3

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

template<typename T, typename Alloc> 
class circular_buffer {
Run Code Online (Sandbox Code Playgroud)

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

circular_buffer如果您在不指定模板参数的情况下使用Alloc,它将使用基本模板声明中指定的默认值:

template <class T, class Alloc = BOOST_CB_DEFAULT_ALLOCATOR(T)>
class circular_buffer;
Run Code Online (Sandbox Code Playgroud)

这隐藏在circular_buffer_fwd.hpp标题中。std::allocator<T>如果平台没有该宏,则该宏的计算结果为或等效。