我有一堂课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
?
提前致谢。
我有一堂课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
?
提前致谢。
您不必对 class 做任何特别的事情B
。在这种情况下,编译器生成的析构函数会做正确的事情。
A
另一方面,类要么缺少赋值运算符和复制构造函数,要么您必须通过将它们设为私有来禁用它们。如果您复制或分配一个A
实例(因此也是一个B
实例),编译器生成的会导致问题。请参阅三的规则。
您实际上不需要为B
. B
没有任何需要手动清理的成员。当一个实例B
被销毁时,它的所有成员的析构函数都会被调用(无论你是否有用户定义的析构函数),这意味着实例A
被它自己的析构函数清理。因此,默认析构函数非常适合B
.
当然,您缺少一个自定义复制构造函数和赋值运算符B
来满足三个规则,但那是另一回事。
当编译器生成的析构函数被调用时(你不需要做任何事情),A 的析构函数将被自动调用。
基本上,在这种情况下,您不需要做任何事情来正确破坏 B 。
B
它的析构函数不需要做任何事情。您确实需要定义默认构造函数或在默认构造A
函数中调用其现有构造函数B