马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
问题一:哪些函数不能实现成虚函数
虚函数依赖:
1:虚函数能产生地址,存储在vftable中
2:对象必须存储在 vfptr-> vftable-> 虚函数地址
**构造函数 **
1:virtual + 构造函数 (NO,不可以在构造函数前加virtual
2:构造函数中 调用的任何函数,都是静态绑定(lg:派生类对象构造过程中,先调用基类的构造函数,由于要通过对象拿到内存中的虚函数表指针,此时基类对象还没有构造出来,如何实现动态绑定?)
**static静态成员方法,也不可以加virtual,static静态成员方法的调用不基于对象 **
析构函数 可以 加 virtual,析构函数调用的时候,对象是存在的,所以可以通过对象内存拿到vfptr,进而找到vftable ,最后找到虚函数地址
问题二:虚析构函数,析构函数的调用的时候,对象是存在的
什么时候把基类的析构函数必须实现成虚函数?当 用基类的指针(引用)指向堆上new出来的派生类对象的时候
delete pb(pb是基类指针); 他调用析构函数的时候,必须发生动态绑定,否则会导致派生的析构函数无法调用,会有内存泄漏风险.
代码1
[code]class Base{public: Base(int data=10):ma(data){ cout |