带有自定义分配器的std :: string

时间:2016-05-28 19:20:26

标签: c++ stl allocator

所以我目前正在编写内存调试器,为此我需要stl容器对象来使用未跟踪的分配器。

我的整个代码库中都有std :: string,所以我输入它来使用我未跟踪的分配器:

M

现在,当我尝试这样做时:

using

我收到此错误:

typedef std::basic_string<char, std::char_traits<char>, UntrackedAllocator<char>> String;

这就是我的Untracked Allocator的样子:

String str { "Some string" };
String copy = str;

这是我第一次使用自定义分配器,所以我不知道它是怎么回事。令人难以置信的是,如果其中一个使用自定义分配器,我就无法执行str1 = str2。

1 个答案:

答案 0 :(得分:1)

问题是将副本c声明为explicit

UntrackedAllocator副本c更改为:

inline UntrackedAllocator(UntrackedAllocator const&) {}

解决编译问题,一切正常:

int main() {
  String str { "13" };
  String copy = str;
  const char* cstr = str.c_str();
  int out = atoi(cstr);
}

这是因为接受std::basic_string的{​​{1}}的赋值运算符需要分配器的隐式复制构造。

相关问题