1

我有一堂课AA有自己的析构函数。

A用来定义B如下。

class A{
  protected:
    int* array;
  public:
    A(int size){array = new int[size];}
    ~A() { delete [] array;}

}

class B{
 public:
  A x;
}

我应该如何定义析构函数B

提前致谢。

4

4 回答 4

7

您不必对 class 做任何特别的事情B。在这种情况下,编译器生成的析构函数会做正确的事情。

A另一方面,类要么缺少赋值运算符和复制构造函数,要么您必须通过将它们设为私有来禁用它们。如果您复制或分配一个A实例(因此也是一个B实例),编译器生成的会导致问题。请参阅三的规则

于 2013-03-07T19:38:42.717 回答
0

您实际上不需要为B. B没有任何需要手动清理的成员。当一个实例B被销毁时,它的所有成员的析构函数都会被调用(无论你是否有用户定义的析构函数),这意味着实例A被它自己的析构函数清理。因此,默认析构函数非常适合B.

当然,您缺少一个自定义复制构造函数和赋值运算符B来满足三个规则,但那是另一回事。

于 2013-03-07T19:39:46.483 回答
0

当编译器生成的析构函数被调用时(你不需要做任何事情),A 的析构函数将被自动调用。

基本上,在这种情况下,您不需要做任何事情来正确破坏 B 。

于 2013-03-07T19:40:36.700 回答
0

B它的析构函数不需要做任何事情。您确实需要定义默认构造函数或在默认构造A函数中调用其现有构造函数B

于 2013-03-07T19:40:37.297 回答