您的位置:首页 > 其它

构造函数、析构函数、虚函数、内联函数

2009-05-19 11:05 316 查看
首先构造函数不能为虚,其中也不能调用虚函数,即使这样通过编译,也不会启用多态机制,而是静态绑定;

析构函数可以为虚,而且经常为虚,目的是在多态派生体系中正确析构资源;

成员函数的虚属性与内联属性不能并存,编译器不会给虚函数内联的。

有了上述结论,我讲一下自己的理解,其中第一点比较麻烦,有很多种说法,个人认为如果构造函数为虚,则会陷入一个递归灾难,因为VPTR将无法进行正确的初始化,而且将构造函数设置为虚是没有任何意义的,因为在进行构造函数调用的时候,对象的类型是明确的,不存在动态绑定、动态决定创建什么对象的问题。另一个想法可能是如果构造函数为虚,可能会覆盖掉基类的构造函数调用。如果在构造函数中调用虚函数比较好解释,因为这个时候VPTR尚未成功设置,而且对象尚未初始化完成,会出现未定义行为,如果在基类的构造函数中调用虚函数,则在派生类初始化的时候,会先调用基类的构造函数,此时派生类部分尚未初始化,基类构造函数中调用的虚函数就无从可依。。。

第二点比较好理解,第三点是因为内联函数在编译器处理阶段会进行内联替换,将内联函数的代码直接拷贝替换,此时的内联函数将作为调用其的内部代码,而不是一个真正意义上的函数,所以其没有函数地址,也就无法进行VTable的构造,所以将其设置为虚是不会起作用的。

对第一点的理解不是很好,希望能有高手指点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐