关闭

More Effective C++ 学习笔记(3)

标签: C++
126人阅读 评论(0) 收藏 举报
分类:

条款3 绝对不要以多态方式处理数组


所谓多态方式,就是基类指针(引用)指向派生类对象的方式。多态是运行时行为,绑定在运行时决定,虚函数的实现靠RTTI机制。

然而,这个条款中所说的数组,就是常量指针配合[]操作符的用法。除非是重载了[]操作符,这个操作,对于编译器来说会解析为偏移量的问题。例如A[i],就等价于*(A+i),也就是从A指针的位置移动i个对象的位置。而这里的对象,由于是在编译时,编译器是无法知晓对象会是什么类型,只能是基于指针的类型,如果是多态的,也就是基类指针。这样,A[i]指向的地址就按照基类对象的大小来移动,但子类的对象往往会比基类大,这样就会出现地址错位的情况,轻则逻辑错误,重则直接挂掉。

类似的,delete []p,如果p是多态的,会有同样的问题。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2795次
    • 积分:162
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论