如果B使用A类(c ++),如何定义B类的析构函数?

时间:2013-03-07 19:37:25

标签: c++

我有一个班级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 个答案:

答案 0 :(得分:7)

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

另一方面,

A要么缺少赋值运算符,要么缺少复制构造函数,或者必须通过将它们设为私有来禁用它们。如果您复制或分配A实例(因此也是B实例,编译器生成的实例将会导致问题。请参阅the rule of three

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在析构函数中没有B需要做的事情。您需要为A定义默认构造函数或在B的默认构造函数中调用其现有构造函数