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

标签 c++ memory-management dynamic auto-ptr

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

相关文章:

C++。如何在 Linux 中跟踪 .so 模块的内存分配

使用指针的动态 LinkedList 的 push() 和 pop() 方法的 C++ 问题

c++ - 使用 int 作为模式在 C++ 中打开文件

c++ - 像素距离取决于轮廓

Swift 重复 URLSession 造成大量内存泄漏

iphone - iPhone内存管理背后/内部到底是什么?

reactjs - 我如何使用 typescript 在 React 中动态创建 JSX 标签?

c++ - 动态创建包含另一个动态创建的结构数组的结构数组时的内存管理

c++ - 如何在C/C++中进行RGB->YUV转换?

c++ - 全局构造函数调用不在 .init_array 部分