Xen*_*gem 7 c++ memory-leaks auto-ptr
为什么这个代码并不会导致内存泄漏?
int iterCount = 1000;
int sizeBig = 100000;
for (int i = 0; i < iterCount; i++)
{
std::auto_ptr<char> buffer(new char[sizeBig]);
}
Run Code Online (Sandbox Code Playgroud)
WinXP sp2,编译器:BCB.05.03
GMa*_*ckG 15
因为你(非)幸运.auto_ptr电话delete,而不是delete [].这是未定义的行为.
尝试做这样的事情,看看你是否幸运:
struct Foo
{
char *bar;
Foo(void) : bar(new char[100]) { }
~Foo(void) { delete [] bar; }
}
int iterCount = 1000;
int sizeBig = 100000;
for (int i = 0; i < iterCount; i++)
{
std::auto_ptr<Foo> buffer(new Foo[sizeBig]);
}
Run Code Online (Sandbox Code Playgroud)
这里的想法是你的析构函数Foo不会被调用.
原因是这样的:当你说delete[] p,实现delete[]是假设转到数组中的每个元素,调用它的析构函数,然后释放p指向的内存.同样,delete p假设在p上调用析构函数,然后释放内存.
char没有析构函数,所以它只是删除p指向的内存.在我上面的代码中,它不会破坏数组中的每个元素(因为它没有调用delete[]),因此一些Foo将使其本地条形变量不被删除.