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

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

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


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

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

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

《More Effective C++》读书笔记-技术

25、将构造函数和非成员函数虚化1、这里所谓的虚拟构造函数,并不是真的指在构造函数前面加上 virtual 修饰符,而是指能够根据传入不同的参数建立不同继承关系类型的对象。class NLCompon...
  • will130
  • will130
  • 2016年05月02日 12:27
  • 2793

《Effective C++》和《More Effective C++》汇总

More Effective C++读书笔记 条款1:指针与引用的区别 二者之间的区别是:在任何情况下都不能用指向空值的引用,而指针则可以;指针可以被重新赋值以指向另一个不同的对象,但...
  • zhu2695
  • zhu2695
  • 2013年06月22日 20:29
  • 2032

More Effective C++ 读书摘要(目录索引)

一、基础议题 Item 1. 区分指针和引用Item 2. 优先考虑C++风格的类型转换Item 3. 决不要把多态用于数组Item 4. 避免不必要的默认构造函数二、运算符Item 5. 小心用户自...
  • thy38
  • thy38
  • 2009年04月26日 10:23
  • 1306

《More Effective C++》读书笔记-异常

9、利用destructors 避免泄漏资源使用指针时,如果在delete指针之前产生异常,将会导致不能删除指针,从而产生资源泄漏。解决办法: 1、使用try-catch语句。int *pi = n...
  • will130
  • will130
  • 2016年04月30日 19:24
  • 277

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

主题 概要 C++ More Effective C++ 效率 编辑 时间 新建 20170121 序号 参考资料 1 More ef...
  • shaozhenged
  • shaozhenged
  • 2017年01月21日 20:23
  • 401

more effective c++--引用计数

引用计数是这样一个技巧,它允许多个有相同值的对象共享这个值的实现。这个技巧 有两个常用动机。第一个是简化跟踪堆中的对象的过程。一旦一个对象通过调用 new 被分配 出来,最要紧的就是记录谁拥有这个对象...
  • xdgs_2005
  • xdgs_2005
  • 2015年04月05日 14:22
  • 369

《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?

昨天一个同学去网易面试C++研发,问到了这么一个问题:如何限制一个类对象只在栈(堆)上分配空间? 一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分...
  • hxz_qlh
  • hxz_qlh
  • 2013年10月26日 21:27
  • 6092

Effective C++: scott Meyers的几句话

前几天,慕名买了一本关于C++的一本书, 即Scott Mey
  • a130737
  • a130737
  • 2014年07月31日 13:21
  • 516

More Effective C++----技巧 & (25)将构造函数和非成员函数虚拟化

技巧 本书涉及的大多数内容都是编程的指导准则。这些准则虽是重要的,但是程序员不能单靠准则生活。有一个很早以前的卡通片叫做“菲利猫”(Felix the Cat), 菲利猫无论何时遇到困难,它都会拿...
  • qianqin_2014
  • qianqin_2014
  • 2016年05月06日 23:30
  • 2488

利用重载避免隐式类型转换(More Effective C++_21(效率))

class UPInt { // unlimited precision  public: // integers 类  UPInt();  UPInt(int value);  ... };//有关...
  • zhangchen1003
  • zhangchen1003
  • 2015年09月05日 16:37
  • 225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:More Effective C++ 学习笔记(3)
举报原因:
原因补充:

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