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

125 阅读2分钟

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

技术

条款25 将constructor和non-member functions虚化

virtual constructor并非是指构造函数为虚函数(也不允许),而是指某种函数,给定不同的输入参数,返回不同的类型的对象,典型例子为clone函数,返回基类指针,指向不同的子类。 将非成员函数虚化的做法:写一个虚函数做实际多态工作,然后用非成员函数调用该虚函数。

条款26 限制某个class所能产生的对象数量

  • 单例模式, static member。
  • 使用一个用于计算对象个数的Base Class将统计对象个数的任务委托出去,类使用者对控制对象个数无感知,但是定义给出count上限。

条款27 要求(或禁止)对象产生于heap之中

析构函数设为private可以限制对象生成在heap中,因为私有的析构函数会使none-heap object在其生命周期结束时隐形调用的析构函数这一行为非法。但是私有析构函数这一做法会影响继承, 改为protect可以解决这一问题。

条款28 Smart Pointers(智能指针)

  • 智能指针借助RAII技术,可以保证资源的释放,这一点比原生指针(又称dumb point)好用很多。
  • auto_ptr这一智能指针并不建议用,一些C++编程规范里建议不使用或禁止使用auto_ptr,而是建议使用unique_ptrshared_ptr

条款29 Reference counting(引用计数)

没太看懂重点在哪里。

条款30 Proxy Classes(替身类、代理类)

可以利用proxy classes类技术区分[]的读写动作,是一个lazy evaluation操作。

条款31 让函数根据一个以上的对象类型来决定如何虚化

描述了double dispatch的解决方案。 方法于虚函数实现机理类似,构建并维护不依赖应用类的第三方virtual table类,存放具体类别和对应调用函数的map数组,实现多个动态类型的虚化问题。