gpt4 book ai didi

c++ - 标准库字符串的 placement new 内存泄漏

转载 作者:太空狗 更新时间:2023-10-29 11:33:51 25 4
gpt4 key购买 nike

我在放置新的标准库字符串时遇到内存泄漏。

下面我给出了显示泄漏的代码。

string string1("new string");
char _string[sizeof(string)];
new(_string) string(string1);

使用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)

这是真正的内存泄漏还是 dbx 将其解释为泄漏?

最佳答案

您仍然需要为您通过 placement new 创建的字符串对象调用析构函数。

std::string 为其存储在堆上的字符分配存储空间(除非您指定自定义分配器,这可能是您在这里所追求的),并且您正在泄漏. (sizeof(string) 是一个常量,不依赖于字符串中存储的内容。)

关于c++ - 标准库字符串的 placement new 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10346447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com