内存释放另一个类里面的类

Pas*_*sha 0 c++ memory pointers allocation reference

我试图了解如果一个类创建另一个类,如何回馈内存.

我有

 Clas A;
Run Code Online (Sandbox Code Playgroud)

然后另一个为A类分配内存的类:

class B{
    private:
        A* data;
    public:
        // Allocating new memory
        B (){
                  A* data =  new A();

        //giving memory back
        ~B(){
                   delete data; };
};
Run Code Online (Sandbox Code Playgroud)

当我在main函数中执行代码时,它就崩溃了.怎么了?我在这里有点迷失.谢谢.

dlf*_*dlf 5

摆脱A*构造函数中的冗余.这样做是创建一个与您的类成员同名的新的局部变量.所以真正的B::data永远不会分配任何东西,当你试图删除它时,事情就会爆发.为了增加对伤害的侮辱,new A()你分配给当地人data将被泄露(好吧; 如果程序没有崩溃,它将被泄露).

class B{
    private:
        A* data;
    public:
        // Allocating new memory
        B (){
           data =  new A();
        }

        //giving memory back
        ~B(){
           delete data;
        }
};
Run Code Online (Sandbox Code Playgroud)

这解决了眼前的问题,但正如juanchopanza在评论中指出的那样,如果你试图复制这个对象,你仍然会遇到问题.

  • 这堂课还是破了.如果复制或指定"B",则会遇到麻烦. (3认同)
  • 此外,使用智能指针而不是手动实现新的和删除.RAII模式可以为您带来很多悲伤. (2认同)