我试图了解如果一个类创建另一个类,如何回馈内存。
我有
Clas A;
然后另一个为A类分配内存的类:
class B{
private:
A* data;
public:
// Allocating new memory
B (){
A* data = new A();
//giving memory back
~B(){
delete data; };
};
当我在main函数中执行代码时,它只会崩溃。怎么了?我在这里有点迷失。 感谢。
答案 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句柄将为您解除分配。实现它意味着编译器定义的复制构造函数,复制赋值运算符,移动构造函数,移动赋值运算符和析构函数都将在框中完成。