首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RAII应该导致内存泄漏吗?

RAII应该导致内存泄漏吗?
EN

Stack Overflow用户
提问于 2012-12-22 15:43:39
回答 2查看 283关注 0票数 0
代码语言:javascript
复制
#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();
}

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

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

原因是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-22 15:47:41

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

代码语言:javascript
复制
int main()
{
     {
         A a(new char);
     }
     _CrtDumpMemoryLeaks();
}

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

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

票数 7
EN

Stack Overflow用户

发布于 2012-12-22 15:47:37

在析构函数有机会运行之前,即在代码块结束之前,您正在转储内存。试试这个,看看有什么不同:

代码语言:javascript
复制
int main()
{
    {
        A a(new char);
    }
    _CrtDumpMemoryLeaks();
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14001029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档