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以防止浅层复制对象,这会给您带来很多麻烦.
可能您的操作系统将释放分配的内存 - 但这是在您的程序退出时完成的.长时间运行的程序将遇到内存问题.
使用智能指针动态涂层对象总是一个好主意.这些将为您完成所有删除操作.