这是我的程序的示例代码。在这里,我使用 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;
}
最佳答案
在您的示例中:HANDLE 指针是智能指针但不是 std::auto_ptr
的数组.在这种情况下,您必须调用 delete [] eventHandle
在第二个之前 function()
调用,这也会删除 HANDLE 智能指针。
但是,HANDLE 对象必须由 CloseHandle 关闭函数在删除之前起作用,所以我在这里质疑智能指针的必要性,因为您将始终知道何时不再需要 HANDLE 并且必须删除指向对象的指针。
附言std::auto_ptr
有点瑕疵。如果您可以访问 VS2010,我建议您使用 std::shared_ptr
.
附言如果你想测试 NULL,你应该总是将指针初始化为 NULL,默认情况下它们不是。 std::auto_ptr<HANDLE> *eventHandle = NULL;
关于c++ - auto_ptr 的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10817300/