c++ - RAII 应该导致内存泄漏吗?

标签 c++ visual-c++ memory-leaks raii

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

struct A
{
    A(char* p)
        : p(p)
    {}

    ~A()
    {   
        delete this->p;
    }

    char* p;
};

int main()
{
    A a(new char);
    _CrtDumpMemoryLeaks();
}

在 Debug模式下运行后,Visual Studio 2012的输出窗口显示:

Detected memory leaks!
Dumping objects ->
{142} normal block at 0x007395A8, 1 bytes long.
 Data: < > CD 
Object dump complete.

这是什么原因?

最佳答案

也许它在实际调用析构函数之前转储内存泄漏?尝试:

int main()
{
     {
         A a(new char);
     }
     _CrtDumpMemoryLeaks();
}

我建议使用标准的(或 boost 的)智能指针类,例如 unique_ptrshared_ptr,而不是直接使用原始指针处理 new/delete。

编辑: 删除了将指针设置为 NULL 的建议,因为 delete 会处理该问题。

关于c++ - RAII 应该导致内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14001029/

相关文章:

c++ - 在 OpenGL 中对顶点、uv 和法线使用一个缓冲区是否比使用三个缓冲区性能更好?

c++ - 错误的最短距离 BFS 算法?

c++ - 在 VC++ 中构建时重命名 dll 文件

c++ - 开源 Visual Studio 项目分发噩梦

c++ - 在 Mac 上使用 Instruments 检查内存泄漏

c++ - Boost.Asio 设计的示例莫名其妙地阻塞

c# - 重型 WPF 控件如何以一种确定的方式使用一个空闲内存?

C++:内存泄漏

c++ - 如何使 MSVS C++ CToolBar 上的按钮及其图像变大?

mysql - Scrapy selenium 中间件内存泄漏