摘要:
1、一般情况下,使用一个东西,只要说我有这个东西就行了,不需要定义。但是,对于类,必须要有定义,为啥? 因为创建对象,需要知道分配多大空间,这种情况,必须询问类的定义式,才知道。2、怎么解决上面的问题? 问题的关键是,必须知道对象占用多大空间。可以这样做,使用指向实现的类(pimpl idom)。包含一个指向对象的指针,这种情况,不需要直到对象占用多大空间。3、声明一个方法的时候,对于方法形参中的对象,不需要include类的定义,为什么? 这个事情是在调用端做的,方法声明端不需要inlucde。4、还有一种办法是,采用接口,接口中没有字段。
阅读全文
posted @ 2014-01-21 19:54
Andy Niu
阅读(807)
推荐(0)
编辑
摘要:
1、inline方法相当于文本替换,不需要承担方法调用的额外开销,同时还有潜在的优势,文本替换后,编译器会进行代码优化。而对于方法调用,编译器没有能力进行代码优化。2、显而易见,inline方法往往会导致目标代码膨胀变大。但是,对于方法本体很小的情况,可能会出现,替换后的文本比方法调用的代码还要小。这也意味着,一般情况下,只有方法本体比较小的情况,才应该声明为inline。3、特别注意:inline只是一个申请,而不是命令。同时,对于class定义中的方法实现,也暗示着申请inline。申请inline告诉编译器,进行文本替换,但最终能不能文本替换,还要取决于编译器。4、编译器拒绝对业务复杂(
阅读全文
posted @ 2014-01-21 19:37
Andy Niu
阅读(399)
推荐(0)
编辑
摘要:
1、异常安全(出现异常,保证安全)有三个保证: a、基本承诺:抛出异常,对象处于有效状态下; b、强烈保证:抛出异常,对象要么修改成功,要么会滚到初始状态,可认为操作的原子行; c、不抛出保证:保证不抛出异常。2、为了异常安全,常常需要使用资源管理类shared_ptr。为了做到强烈保证,即操作的原子性。常常使用策略:copy and swap。考虑指向实现的类(pimpl idom),修改这样对象使用copy and swap策略:首先对对象做个copy副本,修改副本,然后交换指针。3、异常安全保证,符合木桶理论的短板效应,异常安全保证等于最弱者。
阅读全文
posted @ 2014-01-21 19:04
Andy Niu
阅读(180)
推荐(0)
编辑
摘要:
1、定义一个对象,往往意味着必须承担构造成本,离开作用域,必须承担析构成本。即使这个对象没有使用过。2、你可能会认为,不会定义一个不使用的对象。考虑下面的情况下,定义一个对象,执行其他操作,然后使用对象,假如在执行其他操作的时候,出现异常,就导致构造和析构了一个没有使用的对象,解决办法是:一个对象的定义和使用,放在一起,中间尽量不要插入其他操作。也就是说,等到真正使用的时候,才去定义。3、如果当前不知道对象的初始值,就不要定义,不然会导致一次copy构造,一次copy赋值。而应该等到确定初始值的时候,直接使用初始值去copy构造。4、当出现循环怎么办?放在循环外,还是放在循环内? 放在循环外.
阅读全文
posted @ 2014-01-21 18:38
Andy Niu
阅读(648)
推荐(0)
编辑
摘要:
1、private继承意味着,根据某物实现出,继承父类的实现,关闭父类的接口,并不是Is-A的关系,不满足里氏代换,继承的内容访问权限都修改为private。2、那么问题来了,复合也表达根据某物实现出,那到底使用private继承还是复合呢?3、优先使用复合,除非是下面的情况:a、使用对象的protected成员;b、想要重新定义virtual方法。4、考虑下面的极端情况,有个empty类,占用空间大小为0,也就是说,没有字段和virtual方法,如果使用继承,子类大小不增加。如果使用复合,C++规定大小为0的独立对象,插入一个char到空对象,考虑到对齐,实际占用int。也就是说,在这种极端
阅读全文
posted @ 2014-01-21 18:18
Andy Niu
阅读(229)
推荐(0)
编辑
摘要:
1、考虑下面的需求,对迭代器移动d个单位。因为不同类型的迭代器,能力不同,有的迭代器(vector,deque内置迭代器)可以一步到位移动到指定位置,有的迭代器(list内置迭代器)必须一步一步移动,怎么解决?2、很显然,需要判断迭代器的能力,也就是哪一类,不同分类的迭代器采用不同的做法。这需要在运行时判断迭代器的分类,效率低,有没有更好的办法呢?3、很自然地,我们想到增加一个中间层,对不同分类的迭代器封装,对外暴露迭代器的类型信息,也就是在编译器就确定它的分类。具体做法如下: a、每种集合的内置迭代器,都有一个值表示自己的分类,使用typedef 为它的分类取个别名,对外暴露别名; b、..
阅读全文
posted @ 2014-01-21 17:54
Andy Niu
阅读(308)
推荐(0)
编辑