继承关系对基类拷贝控制最直接的影响是基类通常应该定义一个虚析构函数。
和其他虚函数一样,析构函数的虚属性也会被继承。因此,无论基类的派生类使用合成的析构函数还是定义自己的析构函数,都将是虚析构函数。只要基类的析构函数是虚函数,就能确保当我们delete基类指针时将运行正确的析构函数版本。
如果基类的析构函数不是虚函数,则delete一个指向派生类对象的基类指针将产生未定义的行为。
一般来说,如果一个类需要析构函数,那么它也同样需要拷贝和赋值操作。但基类的析构函数并不遵循一述准则,它是一个重要的例外。一个基类总是需要析构函数,而且它能将析构函数设定为虚函数。
虚析构函数将阻止合成移动操作
如果一个类定义了析构函数,即使它通过=default的形式使用了合成的版本,编译器也不会为这个类合成移动操作。