这是我拥有的一些代码的简化版本。由于 class A
中的 pointerB
设置为指针 beta
,在客户端代码中指向分配的内存,我是否必须释放内存class A
的析构函数中的 pointerB
是否也被删除了?
class A{
public:
A(B* beta){
pointerB = beta;
}
~A(){
/*
would deleting pointerB be necessary
*/
}
B* pointerB;
};
class B{
public:
B();
};
//client code
B* beta = new B();
A* alpha = new A(beta);
//do stuff
delete beta;
delete alpha;
beta = NULL;
alpha = NULL;
最佳答案
对于每个 new
,在您的应用程序执行期间必须有且只有一个 delete
。
因此,无论是在析构函数中调用 delete pointerB
还是在外部调用 delete beta
都没有关系。因为这里释放的是同一个内存!问题是 A 是否“拥有”B 的一个实例(因此负责释放它使用的内存)或者 A 是否仅引用 B 的一个实例(例如,当 beta 仍在使用时被删除)。
但是(正如 Roger 已经指出的那样)我建议阅读 std::shared_ptr
和 std::unique_ptr
的文档。这里例如:http://en.cppreference.com/w/cpp/memory在大多数情况下,您可以充分利用这些,而不必关心内存管理。
关于C++ 指针和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16933005/