这会导致内存泄漏吗?

hay*_*yer 1 c++ memory-leaks

我的C++非常生疏,所以现在我开始将它用于一个业余爱好项目,我必须"升级" - 重复...

#include "stdafx.h"
#include "stdlib.h"

class a
{
public:
    void call() { printf("CALL called\n"); }
};

class b
{
public:
    b() { this->pointer = new a; }
    void call() { this->pointer->call(); }
private:
    a* pointer;
};

int _tmain(int argc, _TCHAR* argv[])
{
    b t;
    t.call();

    system("PAUSE");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会导致内存泄漏吗?如果程序决定它不再需要它们,我怎么能删除指针呢?

"删除t"是否足够或者是否会产生内存泄漏?

fbr*_*eto 6

pointerin b已分配但从未删除.您需要为b删除定义析构函数a,否则每次超出范围时都会泄漏a指向的内容:pointerb

b::~b()
{
    delete pointer;
}
Run Code Online (Sandbox Code Playgroud)

  • 这还不够.给那些显然没有施工/破坏和RAW指针经验的人提供建议你应该尝试并确保它们不会对自己造成危险.在这种情况下,最小值还必须包括禁用复制构造函数和赋值运算符(或解释如何正确定义它们). (3认同)