gpt4 book ai didi

c++ - auto_ptr 的动态内存分配

转载 作者:行者123 更新时间:2023-11-28 00:56:44 27 4
gpt4 key购买 nike

这是我的程序的示例代码。在这里,我使用 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/

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