所以我目前正在编写内存调试器,为此我需要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。
答案 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}}的赋值运算符需要分配器的隐式复制构造。