类在另一个类内部的内存释放
Memory deallocation of class inside of another class
我正在努力理解如果一个类创建了另一个类,如何返回内存。
我有
Clas A;
然后是另一个为A类分配内存的类:
class B{
private:
A* data;
public:
// Allocating new memory
B (){
A* data = new A();
//giving memory back
~B(){
delete data; };
};
当我在主函数中执行代码时,它就会崩溃。我做错了什么?我在这里有点迷路了。谢谢
去掉构造函数中多余的A*
。这样做的目的是创建一个与类成员同名的新的局部变量。所以真正的B::data
从来没有得到任何分配,当你试图删除它时,事情就会爆炸。雪上加霜的是,您分配给本地data
的new A()
将被泄露(好吧,如果程序没有崩溃,它将被泄露(。
class B{
private:
A* data;
public:
// Allocating new memory
B (){
data = new A();
}
//giving memory back
~B(){
delete data;
}
};
这解决了眼前的问题,但正如juancopanza在评论中指出的那样,如果你试图复制这个对象,你仍然会遇到问题。
这是RAII/Rule of Zero路由(假设您的编译器支持C++11(
class A {};
class B {
private:
std::unique_ptr<A> data;
public:
B() : data(new A) {
}
};
在这种情况下,RAII句柄unique_ptr
将为您处理解除分配。实现它意味着编译器定义的复制构造函数、复制赋值运算符、移动构造函数、移动赋值运算符和析构函数都可以正常工作。
相关文章:
- 包含矢量指针的结构的内存释放问题
- Valgrind 声称内存释放中的自由空间太多
- 当 C 和 C++ 中严格要求内存释放时
- C++ 中指针变量的内存释放
- 德克内存释放
- 临时对象 c++ 的内存释放
- C 全局对象变量内存释放
- C++矢量动态内存释放/删除
- 从 cv::Mat 初始化的 IplImage 的内存释放
- SWIG类型映射中的内存释放
- STL容器中的内存释放
- QWebView内存释放
- 内存释放 C++
- 大返回值(如字符串)的内存释放如何在C++中发生
- 重新分配之前的内存释放
- Linux C++ 中的内存释放
- VS2012编译器奇怪的内存释放问题
- 调试断言失败!错误的内存释放
- 负责 COM 互操作中的内存释放
- imread命令后OpenCV矩阵内存释放