Constructors, Destructors, and Assignment Operators (tsuzuku)

条款 7:为多态基类声明 virtual 析构函数

先来简单复习一下工厂模式:

有接口和一系列产品类。客户需要合适的产品类来执行接口函数时,他只需要访问工厂类,给一些参数告诉工厂类我需要的时什么产品,让工厂类来负责创建。

如果我们需要用工厂类创建一个类指针,那么返回的对象就必须在堆中被分配内存。堆内存是需要手动释放的。如果不声明 virtual 析构函数,那么不作为的析构函数就会被创建,即使你不在代码中 delete 你得到的产品类,也不会报错。如果遵循条款 7,那么未定义的析构函数就会被调用,从而出错。这个报错有效避免了用户不知道的内存浪费。

也就是说工厂模式下接口就得是个接口,纯虚类。

条款 8:别让异常逃离析构函数