使用c++字符串时内存泄漏
Memory leak while using c++ string
当我在下面的程序上运行valgrind时,它报告内存泄漏。你能解释一下原因吗?
#include <string>
#include <iostream>
using namespace std;
int main()
{
char * arr = (char *) ::operator new(sizeof(char));
string s = arr;
return 0;
}
- 行字符串s = arr到底发生了什么?它会复制arr吗?
valgrind
正确。您调用new
而不调用delete
,因此您有内存泄漏。
将arr
赋给s
时,后者不占有前者的所有权;相反,它会复制。释放arr
仍然是你的责任。
arr
的所有权不传递给s
,它将arr
复制到s
的内部缓冲区。应该使用delete
操作符
我想你认为string
将获得arr
的所有权,并负责delete
和arr
。但这是错误的。
string s = arr;
只是从arr
复制字符直到到达