最佳答案
有一类虚函数仍然需要将它们内联。考虑以下情况:
class Base {
public:
inline virtual ~Base () { }
};
class Derived1 : public Base {
inline virtual ~Derived1 () { } // Implicitly calls Base::~Base ();
};
class Derived2 : public Derived1 {
inline virtual ~Derived2 () { } // Implicitly calls Derived1::~Derived1 ();
};
void foo (Base * base) {
delete base; // Virtual call
}
但是,由于每个析构函数调用它的父析构函数(在这些情况下为空) ,编译器可以内联 那些调用,因为它们实际上不调用基类函数。
对于基类构造函数或任何派生实现也调用基类实现的函数集,存在相同的原则。