More Effective C++议题【三】:不要对数组使用多态

来源:互联网 发布:杜兰特本赛季数据统计 编辑:程序博客网 时间:2024/05/13 05:42

<<More Effective C++>> 学习笔记【三】

这个议题的实际意义在于对多态的size要有清晰的理解和把控。建议中给出了如下出错代码 :

//注意!这是错误的代码class BST { ... };class BalancedBST: public BST { ... };int printBSTArray(  ostream& s,                    const BST array[],                    int numElements){    for (int i = 0; i < numElements; i++)    {        s << array[i]; //假设BST类重载了操作符<<    } }//对数组使用多态    BST BSTArray[10];    //...    printBSTArray(cout, BSTArray, 10); // 运行正常    BalancedBST bBSTArray[10];    //...    printBSTArray(cout, bBSTArray, 10);//出错!

其实对于嵌入式或者C程序员来讲,这里的错误很好理解:

printBSTArray函数中的对数组array[]的遍历操作实际上通过指针的移动进行,而每次移动的大小在本例中则是sizeof(BST)。

那么多态在这种情况下的移动会产生内存大小的不确定性。

这个建议很好理解。不再多话。



原创粉丝点击