关闭

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

标签: More Effective C++多态sizeof内存指针
454人阅读 评论(0) 收藏 举报
分类:

<<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)。

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

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



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场