我在标准库字符串的新位置面临内存泄漏.
下面我给出了泄漏显示的代码.
string string1("new string");
char _string[sizeof(string)];
new(_string) string(string1);
Run Code Online (Sandbox Code Playgroud)
使用dbx找到泄漏,如下所示
Actual leaks report (actual leaks: 1 total size: 52 bytes)
Total Num of Leaked Allocation call stack
Size Blocks Block
Address
========== ====== =========== =======================================
52 1 0x43f68 operator new < std::basic_string<char,std::char_traits<char>,std::allocator<char> >::__getRep < std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string < main
Possible leaks report (possible leaks: 0 total size: 0 bytes)
Run Code Online (Sandbox Code Playgroud)
这是真正的内存泄漏还是dbx将其表示为泄漏?
您仍然需要为您通过placement new创建的字符串对象调用析构函数.
std::string为它存储在堆上的字符分配存储空间(除非你指定一个自定义分配器,这可能就是你在这里得到的),并且你正在泄漏它.(sizeof(string)是一个常量,不依赖于字符串中存储的内容.)