effective c++条款07

1.带多态性质的基类应该声明一个virtual析构函数,一个基类只要带有任何虚函数,都应该声明一个virtual析构函数
2.所有抽象类的析构函数都应该带有一份实现,否则链接器会报错(因为派生类的析构最终会调用到基类的析构函数,如果基类的析构函数没有提供实现,此时链接器找不到其实现,就会抱怨)
3.如果一个类不是被用作基类或者不是用于多态,则不应该声明virtual析构函数,因为声明之后,类的组成部分中就多了一个vptr(virtual table ptr),vptr指向一个由函数指针组成的数组,称为vbtl(virtual table),每个带有virtual函数的类都有一个virtual table
这个指针的大小可能是32位,可能是64位,视具体情况而定(我认为跟编译器和系统有关),所以一个Point类(两个int)如果带有一个虚函数的话,它的对象可能有(8+4)个字节,这就是结构臃肿,而且不能与其他64位的结构互相转化

猜你喜欢

转载自blog.csdn.net/baidu_25539425/article/details/79904222