使用稍加修改的Howard Hinnant 的 C++11 栈分配器,文档在此和这里,加上 std::basic_string
并使用编译器 gcc
和 libstdc++
,以下代码示例(在线演示):
const unsigned int N = 200;
arena<N> a;
short_alloc<char, N> ac(a) ;
std::basic_string<char,std::char_traits<char>,short_alloc<char, N>> empty(ac);
会产生以下错误(等等):
error: no matching function for call to 'short_alloc<char, 200ul>::short_alloc()'
if (__n == 0 && __a == _Alloc())
^
然而,当使用clang
并且使用libc++
(请参考实例),它可以正常编译而没有错误。
std::basic_string
的stdlibc++
实现期望分配器具有默认构造函数。
C++11是否要求分配器具有默认构造函数?哪种实现是正确的?