抱歉,标题。我不知道该如何命名。如果有任何国防部正在阅读并且他们理解该问题,请根据需要重新命名。

假设您创建一个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和赋值运算符)。

07-24 09:45