如果类B使用类a,如何定义类B的析构函数(c++)
How to define a destructor of a class B if B uses class A (c++)?
我有一个类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
的析构函数?
您不必对B
类做任何特殊操作。在这种情况下,编译器生成的析构函数会做正确的事情。
类A
缺少赋值操作符和复制构造函数,或者必须通过将它们设置为私有来禁用它们。如果复制或分配A
实例(因此也包括B
实例),编译器生成的实例将导致问题。
实际上不需要为B
定义析构函数。B
没有任何需要手动清理的成员。当B
的实例被销毁时,调用其所有成员的析构函数(无论是否有用户定义的析构函数),这意味着A
的实例由它自己的析构函数清理。因此,默认析构函数对于B
来说是完全合适的。
当然,您缺少B
的自定义复制构造函数和赋值操作符来满足三规则,但这是另一回事。
当编译器生成的析构函数被调用时(你不需要做任何事情),a的析构函数将自动被调用。
基本上,在这种情况下,您不需要做任何事情来正确地销毁B。
B
不需要在析构函数中做任何操作。您需要为A
定义一个默认构造函数,或者在B
的默认构造函数
相关文章:
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 在从仅移动类型派生的类中定义析构函数在使用 std::vector emplace_back或push_back创建时会
- 为什么在定义析构函数时隐式删除移动构造函数
- 仅在删除包含对象的向量时调用自定义»析构函数«
- 这个递归类需要一个自定义析构函数?
- C++ - 定义自定义析构函数时程序崩溃
- 定义析构函数可以防止成员函数内联
- 使用自定义析构函数时出现"Undefined reference"错误
- C++ 在迭代器类中定义析构函数
- `不可复制`与自定义析构函数
- 是否可以使用 std::shared_ptr 创建共享对象池,并在没有自定义析构函数的情况下创建weak_ptr
- 我们什么时候必须在派生类 c++ 中定义析构函数
- 为什么当定义析构函数时,编译器不再添加默认的move函数和赋值函数
- 为标量类型显式定义析构函数
- 提供(空的)用户定义析构函数会导致编译错误
- 为什么带有用户定义析构函数的类的实例将成员指针设置为零
- 如何正确定义析构函数
- 带有Placement New的自定义析构函数
- 什么时候需要定义析构函数?
- 是否可以重新定义析构函数