常见错误33: 指向基类类型指针的指针在类型转换中的认识误区----读书笔记《c++...
时间:2010-08-11 来源:lzueclipse
D1 d1;
D1 *d1p = &d1;//没问题
B **ppb1 = &d1p;//编译期错误
D2 *d2p;
B **ppb2 = &d2p;//编译期错误
*ppb2 = *ppb1;//现在d2p指向一个D1类型的对象了!!!!
是不是看起来很眼熟?
和常见错误32中的常量性引入了多一级后就不能再保持一样。
1)指向派生类的指针皆为(is-a)指向以public方式继承的基类的指针;
2)指向派生类的指针的指针却不是指向以public方式继承的基类的指针的指针。
妈的,太拗口了,理解就行!
和讨论常量性的例子类似,这种会引发错误的记过乍看并无不妥。
void doBs(B *bs[], B *pb) {
for(int i = 0; bs[i]; ++i)
if(somecondition(bs[i], pb))
bs[i] = pb;//大事不妙
}
//…
extern D1 *array[];
D2 *aD2 = getMeAD2();
doBs((B**)array, aD2);//很危险!!!
安全的设计会用标准库中的容器。
相关阅读 更多 +