OO 多态时的析构函数

记录一个很唐的错误。

class Base{};
class Derived: public Base {
public:
	Derived(...);
private:
	std::unique_ptr<...> ptr;
}

这种情况下,创建一个 Derived 对象:

Base *derived = new Derived(...);

在出 derived 对象的作用域时,调用的是 Base 的析构函数。所以 derived 的 ptr 持有的对象不会被释放。

因为析构函数应该是动态的,这才能保证对象释放时调用到了正确的析构:

class Base{
public:
	virtual ~Base() = default;
};
class Derived: public Base{
public:
	~Derived() override = default;
...
}