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

时间:2014-04-29 22:21:38

标签: c++ pointers memory reference allocation

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

我有

 Clas A;

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

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

        //giving memory back
        ~B(){
                   delete data; };
};

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

2 个答案:

答案 0 :(得分:5)

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

data

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

答案 1 :(得分:0)

这是 RAII /零路由规则(假设您的编译器支持C ++ 11)

class A {};

class B {
private:
    std::unique_ptr<A> data;

public:
    B() : data(new A) {
    }
};

在这种情况下,unique_ptr的RAII句柄将为您解除分配。实现它意味着编译器定义的复制构造函数,复制赋值运算符,移动构造函数,移动赋值运算符和析构函数都将在框中完成。

相关问题