这是我的程序的示例代码。在这里,我使用std :: auto_ptr动态分配内存并输入值(在函数中)之后我再次为同一个变量分配内存。因此,在为同一内存分配新内存时,是否会释放先前分配的内存。因为我使用std :: auto_ptr,所以我对此表示怀疑。提前谢谢。
#include "stdafx.h"
#include <iostream>
#include <memory>
#include <windows.h>
std::auto_ptr<HANDLE> *eventHandle;
void function()
{
eventHandle = new std::auto_ptr<HANDLE>[5];
std::auto_ptr<HANDLE> handle(new HANDLE);
*handle = CreateEvent(NULL, false, false, NULL);
eventHandle[0] = handle;
}
void f2()
{
if(NULL == eventHandle)
{
std::cout<<" HANDLE NULL";
}
}
int _tmain(int argc, _TCHAR* argv[])
{
function();
f2();
function();
return 0;
}
答案 0 :(得分:2)
在您的示例中:HANDLE指针是智能指针,但不是std::auto_ptr
的数组。在这种情况下,您必须在第二次delete [] eventHandle
调用之前调用function()
,这也会删除HANDLE智能指针。
但是,在删除之前,HANDLE对象必须由CloseHandle函数关闭,所以我在这里质疑智能指针的需要,因为你总是知道何时不再需要HANDLE和指向必须删除该对象。
P.S。 std::auto_ptr
有点瑕疵。如果您有权使用VS2010,我建议您使用std::shared_ptr
。
P.P.S。如果你想测试NULL,你应该总是将指针初始化为NULL,它们不是默认的。 std::auto_ptr<HANDLE> *eventHandle = NULL;
答案 1 :(得分:1)
下面
std::auto_ptr<HANDLE> *eventHandle;
你有一个原始指针,所以当你重新分配时,之前的值就会被覆盖,之前指向的auto_ptr
类型的对象数组会被泄露。