抱歉,标题。我不知道该如何命名。如果有任何国防部正在阅读并且他们理解该问题,请根据需要重新命名。
假设您创建一个new
变量(varOne)。
在varOne代码中,其他变量创建为new
(varTwo,varThree)。
如果在varOne上调用delete,是否将varTwo和varThree删除,还是需要删除它们并删除varOne?
最佳答案
您只需要删除varTwo和varThree,因为当您脱离varOne的析构函数时,用于调用varOne的析构函数的删除操作将清理该varOne实例。
换句话说,在下面的示例中,varOne是Foo,varTwo是m_i,而varThre是m_c:
class Foo
{
public:
Foo() : m_i( new int ), m_c( new char ) { }
~Foo() { delete m_i; delete m_c; }
// don't forget to take care of copy constructor and assignment operator here!!!
private:
int* m_i;
char* m_char;
};
main()
{
Foo* p = new Foo;
delete p;
}
另外,请确保在执行此操作时遵循The Rule of Three或程序将遇到内存问题。 (换句话说,如果要在构造函数中进行内存分配,请确保覆盖或删除默认的copy-constructor和赋值运算符)。