17 December 2022

C++ 核心指南目录

C.132: Don’t make a function virtual without reason

理由

多余的虚函数,会增加运行时间和对象内存大小。虚函数是能够被重载,这就在继承类中打开大门迎接错误了。虚函数确保在模板化的层级中代码可复用。

例子

template<class T>
class Vector {
public:
    // ...
    virtual int size() const { return sz; }   // bad: what good could a derived class do?
private:
    T* elem;   // the elements
    int sz;    // number of elements
};

你根本不会通过基类使用这种 “ vector ”的继承类。

强化

  • 标记某个类有虚函数,却不会有继承类
  • 标记某个类的所有成员函数都是虚的,并有对应的实现。