《More Effective C++》
文章平均质量分 94
# 《More Effective C++》
coding-hwz
生前何必久睡
展开
-
《More Effictive C++》学习笔记 — 杂项
《More Effictive C++》学习笔记 — 杂项条款33 — 将非尾端类设计为抽象类1、赋值操作符的切割问题2、使用虚函数赋值3、使用RTTI条款33 — 将非尾端类设计为抽象类假设我们正在做一个项目,以软件来处理动物。大部分动物的实现都一致,其中有两种动物需要特殊处理:蜥蜴和鸡,在此情况下,这几个类之间的关系可能是这样的:Animal 类负责处理所有的动物的共同特征,Lizard 和 Chicken 负责两种动物的特化处理。1、赋值操作符的切割问题class Animal{pub原创 2021-09-02 21:46:17 · 230 阅读 · 0 评论 -
《More Effictive C++》学习笔记 — 技术(六)
《More Effictive C++》学习笔记 — 技术(六)条款31 — 让函数根据一个以上的对象类型来决定如何虚化条款31 — 让函数根据一个以上的对象类型来决定如何虚化多态是C++的特性之一,有我们这个条款里的话来描述,就是,函数的调用是根据当前对象类型决定的。那么,自然而然,我们会产生更为泛化的需求:如何根据几个对象的类型决定调用哪个函数?这个条款的场景如下:如果我们尝试写一个视频游戏软件,场景发生于外层空间,涉及宇宙飞船、太空站、小行星等天体。当宇宙飞船、太空站、小行星飕飕略过你所构筑原创 2021-08-31 22:03:42 · 207 阅读 · 0 评论 -
《More Effictive C++》学习笔记 — 技术(五)
《More Effictive C++》学习笔记 — 技术(五)条款30 — proxy classes1、二维数组的表现2、区分 operator[] 的读写动作3、代理类的实现条款30 — proxy classes1、二维数组的表现C++中能够直接创建多维数组吗?当每一维的大小都为常量时可以;若为变量,则无论是直接声明多维数组或是在堆上创建多维数组都是不可以的:int iDem1, iDem2;int array2D[iDem1][iDem2]; // invalidint array2D原创 2021-08-26 11:50:45 · 194 阅读 · 0 评论 -
《More Effictive C++》学习笔记 — 技术(四)
《More Effictive C++》学习笔记 — 技术(四)条款29 —— 引用计数(二)1、把引用计数加到既有的类上(1)CLS_RCIPtr(2)CLS_RCIPtr 的使用2、评估3、同值数据共享4、basic_string5、shared_ptr 实现条款29 —— 引用计数(二)1、把引用计数加到既有的类上我们将 CLS_RCObject 作为基类固然可以达到引用计数的目的。然而,对于已经存在的类(其他库中导出的类,框架中提供的类)等,我们该如何实现此功能?答案是提供间接性,增加一个代理原创 2021-08-20 13:08:58 · 166 阅读 · 0 评论 -
《More Effictive C++》学习笔记 — 技术(三)
《More Effictive C++》学习笔记 — 技术(三)条款29 —— 引用计数1、许多同值对象2、引用计数的实现条款29 —— 引用计数引用计数这项技术,允许多个等值对象共享同一实值。此技术的发展有两个动机,第一是为了简化堆对象的记录工作(包括其拥有者,何时可以删除等)。引用计数可以消除此种负荷,因为其所有权永远属于她自己。一旦它发现没有人再使用它,它便会自动销毁自己。也因此,引用计数可以协助构建出垃圾回收机制。第二是为了实现一种常识,一种缓式评估的策略。最好是让所有等值对象共享一份实值。书原创 2021-08-17 21:53:41 · 173 阅读 · 0 评论 -
《More Effictive C++》学习笔记 — 技术(二)
《More Effictive C++》学习笔记 — 技术(二)条款27 — 要求(或禁止)对象产生于堆之中1、要求对象产生于堆之中2、判断某个对象是否位于堆中(1)使用 operator new(2)不具移植性的解决方案3、安全的delete(1)全局 new 和 delete(2)提供 abstract mixin base class条款27 — 要求(或禁止)对象产生于堆之中有的时候,我们可能会希望对象自杀,通过调用delete this。这样的操作要求对象必须分配与堆中。有的时候,我们希望对象原创 2021-08-08 21:59:06 · 216 阅读 · 0 评论 -
《More Effictive C++》学习笔记 — 技术(一)
《More Effictive C++》学习笔记 — 技术(一)条款25 — 将 constructor 和 non-member function 虚化1、构造函数虚化2、拷贝构造函数虚化3、非成员方法虚化条款26 — 限制某个类所能产生的对象数量1、允许一个对象条款25 — 将 constructor 和 non-member function 虚化考虑一个处理时事新闻(包括图片和文本)的类结构:class NLComponent{};class TextBlock : public NLCom原创 2021-08-02 22:01:10 · 125 阅读 · 0 评论 -
《More Effictive C++》学习笔记 — 效率
《More Effictive C++》学习笔记 —效率条款16 — 谨记80-20法则条款17 — 考虑使用lazy-evaluation1、引用计数2、区分读和写3、缓式取出4、表达式缓式评估5、总结条款18 — 分期摊还预期的计算成本条款21 — 利用重载技术避免隐式类型转换条款22 — 考虑以操作符复合形式(op=)替代其独身形式(op)1、操作符复合形式和独身形式的关系2、复合形式和独身形式的效率比较条款16 — 谨记80-20法则80-20法则指的是80%的程序资源被用于20%的代码上;80原创 2021-07-30 16:39:22 · 233 阅读 · 0 评论 -
《More Effictive C++》学习笔记 — 基础议题 操作符 异常
这里写目录标题条款3 — 绝对不要以多态方式处理数组1、C++标准中的规定2、编译器实现3、问题分析条款3 — 绝对不要以多态方式处理数组好吧,这个问题在《深度探索C++对象模型》也提到了。当时,我只在msvc上验证了下,发现并不是这样。现在又看到这个提议,我认真地研究了下。1、C++标准中的规定首先,我们来看看C++中是怎样规定的(摘自C++20草案):In an array delete expression, if the dynamic type of the object to be原创 2021-07-23 21:34:24 · 335 阅读 · 2 评论