我有一个班级A
。
A
有自己的析构函数。
我使用A
定义B
,如下所示。
class A{
protected:
int* array;
public:
A(int size){array = new int[size];}
~A() { delete [] array;}
}
class B{
public:
A x;
}
我应该如何定义B
的析构函数?
提前致谢。
答案 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
的默认构造函数中调用其现有构造函数