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

How to define a destructor of a class B if B uses class A (c++)?

本文关键字:定义 析构函数 c++ 如果 何定义      更新时间:2023-10-16

我有一个类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的析构函数?

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

另一方面,

A缺少赋值操作符和复制构造函数,或者必须通过将它们设置为私有来禁用它们。如果复制或分配A实例(因此也包括B实例),编译器生成的实例将导致问题。

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

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

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

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

B不需要在析构函数中做任何操作。您需要为A定义一个默认构造函数,或者在B的默认构造函数

中调用其现有构造函数。