在析构函数中是否需要删除?

dai*_*isy 9 c++ memory-management

我有以下代码,我想知道这delete b是否有必要?我的操作系统会自动清除分配的内存区域吗?

class A
{
    B *b;

    A()
    {
        b = new B();
    }

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

非常感谢.

sha*_*oth 12

是的,你必须delete与创建的每个对象new 是你自己.在这种情况下,它看起来像class A拥有非常实例class B并负责调用delete.

使用智能指针管理class B实例生命周期会更好.另请注意,您必须实现或禁止赋值运算符和复制构造函数,class A以防止浅层复制对象,这会给您带来很多麻烦.


dus*_*aer 5

可能您的操作系统将释放分配的内存 - 但这是在您的程序退出时完成的.长时间运行的程序将遇到内存问题.

使用智能指针动态涂层对象总是一个好主意.这些将为您完成所有删除操作.

  • 性病:: auto_ptr的
  • 提高:: shared_ptr的
  • 提高:: scoped_ptr的