effective C++ 读后感(七)为多态基类声明virtual析构函数

来源:互联网 发布:网络教育本科是几本 编辑:程序博客网 时间:2024/05/16 04:46

七、为多态基类声明virtual析构函数

当我们使用工厂设计模式时,factory函数往往返回一个基类指针,指向一个新生成的子类对象。但是,如果对这个对象执行delete,就有可能会出现问题:要是基类的析构函数不是virtual的,那么析构函数不具有多态性,子类的析构函数不会被执行,可能造成内在泄漏。

所以说,如果我们定义一个类,要将其作为基类实现多态,那么这个类的析构函数应该设定为virtual的。

不过,如果一个类不被用作多态基类,将其析构函数定为virtual的往往是个坏主意,因为声明为virtual后该类就会有一个虑函数表,由一个虑函数表指针指出,这样会占用更多的空间。一般规则是:只有当类中至少且个virtual函数,才为它声明virtual析构函数。

这也表明,我们不应该让自己编写的类继承自一个析构函数不为virtual的类。比如说string,各种STL容器。

将析构函数声明为virtual的还有一个用途:当我们希望一个类为抽象类,但又没有任何纯虚函数,这时可能将析构函数声明为纯虚函数(当然因为最终会被调用,所以不要忘了实现它)。

0 0