派生类销毁的最佳实践是什么

What is the best practice for derived class destruction?

本文关键字:是什么 最佳 派生      更新时间:2023-10-16

我们知道基类析构函数被标记为虚拟的,以便正确地销毁作为基类型指针的派生类实例。那么,以下派生类析构函数实践之间有什么区别呢?

  1. 简单析构函数:~Derived();
  2. 带覆盖的析构函数:~Derived() override;
  3. 带重写的默认析构函数:~Derived() override = default;
  4. 虚拟析构函数:virtual ~Derived() override = default;

还有已知的最佳实践吗?

Primer:我们希望Baseclass::~Baseclass是虚拟的,class DerivedBaseclass派生为公共的。

  1. 简单析构函数:如果没有其他类(也永远不会(从Derived派生,那么这就是你基本上要使用的。不要将所有析构函数声明为虚拟的,但更喜欢使用override关键字,如2中所述。例外:您创建了一个分片库,并希望人们安全地从您的库中分片类。

  2. 带重写的析构函数:如果您声明一个dervied类并想调用它的基类析构函数,请使用override。这样,如果您忘记将virtual添加到基类destructor,就会出现编译错误。

  3. 带重写和默认析构函数的析构函数:如果忘记声明基类析构函数为virtual,也会出现编译错误。如果您不需要执行特殊的清理任务(例如释放HEAP分配的内存(,请使用此选项。比写入~Derived() {}更好/更干净

  4. 所有这些的结合:好吧,声明一个析构函数是虚拟的并使用重写没有任何好处。Override无论如何都会将方法(在本例中为destcurator(声明为虚拟方法。请参阅:https://en.cppreference.com/w/cpp/language/override.所以它和3是一样的。

相关文章: