首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

深度探索CPP对象模型之vptr初始化语意学解决办法

2012-08-08 
深度探索CPP对象模型之vptr初始化语意学想请问各位大牛,有没有谁看过这本书,在P218,有不明白的地方,如下:

深度探索CPP对象模型之vptr初始化语意学
想请问各位大牛,有没有谁看过这本书,在P218,有不明白的地方,如下:
在class的constructor的member initialization list中……请见图。



我怎么感觉这两段话有矛盾呢?就是说vptr在constructor调用的时候,在member initialization lise 和user code前设置好,但是第二段话是什么意思啊?好像和第一段话矛盾了,第一段说了是安全的,然后第二段转而说不安全,是不是我理解错了?能不能给个例子什么的? 
谢谢啦。

[解决办法]
个人理解是,第一段说就是说vptr在base constructor调用之后,在member initialization lise

 和user code前设置好,那么在base constructor中参数就不能调用虚函数,此时vptr还没设

置好,是一个任意数,第二段就是说这样不安全
[解决办法]
第二段就是说在任意时候供应给base class constructor的参数是该class的虚函数都是不安全的
[解决办法]
这个翻译有点坑爹啊,构造函数执行过程:
1. 构造基类. // 此时调用虚函数是不安全的。
2. 设置 vptr.
3. 调用初始化列表和构造函数体类的代码。 // 此时调用虚函数是安全的。

假设有 class B 继承于 class A
第一段的意思是:

B::B() : x(virtual_fun()) { virtual_fun(); } 这样是安全的。

第二段的意思是:

B::B(): x(1), A(virtual_fun()) { ... } 这样是不安全的。

也就是说,调用虚函数来作为基类的构造函数的参数是不安全的。

注:以上的“安全”仅指的是 vptr 的安全

热点排行