重读STL源码剖析:析构
纯虚析构函数
理论上来说,将一个函数声明为纯虚函数后,这个类即变为抽象类。纯虚函数只提供接口,而不提供实现,但纯虚析构函数一定要提供定义。这是由C++特性决定的,编译器对派生类的析构函数会进行扩展,以静态调用的方式调用其每一个虚基类和上基类的析构函数,尽管是一个抽象类,但仍然要为这个纯虚析构提供实现,即使是awov::~awov() {} 这样没有任何操作的实现,因为如果不提供,将导致链接失败
虚函数与内联
内联函数是一种静态行为,由编译器在调用地点展开,这是在编译期进行的;而虚函数是一种动态行为,是在运行期通过虚函数表跳转来实现的,因此inline与virtual是矛盾的,之所以声明为virtual的内联函数能成功运行,这是因为编译器做了优化。inline是对编译器的一种建议,而编译器是否采纳则不一定。j