300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Effective C++条款7:为多态基类声明virtual析构函数

Effective C++条款7:为多态基类声明virtual析构函数

时间:2019-03-05 09:52:50

相关推荐

Effective C++条款7:为多态基类声明virtual析构函数

要点:

带多态性质的基类或者class中有virtual函数,就应该将析构函数声明为virtual,例如

class TimeKeeper{public:TimeKeeper();~TimeKeeper();};class AtomicClck : public TimeKeeper //原子钟 { };class WaterClck : public TimeKeeper //水钟 { }; class WristClck : public TimeKeeper //腕表 { };int main(){ TimeKeeper * ptk = getTimeKeeper() ; //工厂方法获取钟的对象delete ptk ; //由于父类中的析构函数声明为非virtual,所以只会执行父类的析构函数//这样就会造成子类中特有成员内存泄露 }

以上代码造成内存泄露 没有释放子类一部分所占的内存,解决方法就是 在父类的析构函数前民加virtual,如下:

class TimeKeeper{public:TimeKeeper();virtual ~TimeKeeper();};

相关要点:class内存

(一)类内部的成员变量:

普通的变量:是要占用内存的,但是要注意对齐原则(这点和struct类型很相似)。static修饰的静态变量:不占用内容,原因是编译器将其放在全局变量区。(二)类内部的成员函数:普通函数:不占用内存。虚函数:要占用4个字节,用来指定虚函数的虚拟函数表的入口地址。所以一个类的虚函数所占用的地址是不变的,和虚函数的个数是没有关系的。

PS:就算class内什么都没有,也必须占用一个字节

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。