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

原创 2015年11月18日 17:06:46

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


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

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《Effective C++》学习笔记(1~3)

《Effective C++》学习笔记(1~3) 导读 explicit关键字修饰构造函数,禁止隐式类型转换; Widget w1 = w0; //等号语法在此起到调用拷贝构造函数的作用,而不...

More Effective C++学习笔记(4)-效率

主题 概要 C++ More Effective C++ 效率 编辑 时间 新建 20170121 序号 参考资料 1 More ef...

More Effective C++学习笔记(5)-技巧

主题 概要 C++ More Effective C++ 技巧 编辑 时间 新建 20170121 序号 参考资料 1 More ef...

More Effective C++学习笔记(2)-运算符

主题 概要 C++ More Effective C++ 运算符 编辑 时间 新建 20170108 序号 参考资料 1 More e...

Effective_C++ 学习笔记

  • 2012-01-11 21:23
  • 334KB
  • 下载

More Effective C++总结(3):异常

条款9: 使用析构函数防止资源泄漏 下面代码会产生的问题:pa->processAdoption()可能抛出异常,导致delete不被执行 void processAdoption(istream...
  • rommi
  • rommi
  • 2011-09-20 15:31
  • 631

《more effective c++》Item M3:不要对数组使用多态

类继承的最重要的特性是你可以通过基类指针或引用来操作派生类。这样的指针或引用具有行为的多态性,就好像它们同时具有多种形态。C++允许你通过基类指针和引用来操作派生类数组。不过这根本就不是一个特性,因为...

More Effective C++笔记

(之前Mindjet笔记的截图) 更多:(http://blog.csdn.net/u011512437/article/details/48879543 “Effective C++笔记”)

More Effective C++读书笔记(一)

条款1:指针与引用的区别 1、二者之间的区别是:在任何情况下都不能用指向空值的引用,而指针则可以;指针可以被重新赋值以指向另一个不同的对象,但是引用则总是指向在初始化时被指定的对象,以后不能改变 ...

More Effective C++读书笔记(五)

技术 条款25:将构造函数和非成员函数虚拟化 1.虚拟构造函数是指能够根据输入给它的数据的不同而建立不同类型的对象,比如从磁盘读取对象信息。 2.被派生类重定义的虚拟函数不用必须与基类的虚拟函数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)