记住: 如果你在new表达式中使用[ ],必须在相应的delete表达式中也是用[ ]。如果你在new时不使用[ ],一定不要在delete时使用[ ]。 最好不要用数组形式做typedef,基本都可以使用vector之类的 ...
分类:
编程语言 时间:
2018-06-23 13:17:09
阅读次数:
128
记住: APIs往往要求访问原始资源,所以每一个RAII类应该提供一个“取得其所管理之资源”的办法。 对原始资源的访问可能经由显示转换或隐式转换。一般而言显示转换比较安全,但隐式转换对客户比较方便。 tr1::shared_ptr和auto_ptr重载了指针取值操作符 (operator->和ope ...
分类:
编程语言 时间:
2018-06-18 17:05:48
阅读次数:
211
注意: 赋值RAII对象必须一并复制它所管理的资源,所以资源的拷贝行为决定RAII对象的拷贝行为。 普遍而常见的RAII类拷贝行为是:抑制拷贝,实行引用计数法。 Lock ml1(&m);Lock ml2(ml1); //将ml1复制到ml2身上,会发生什么? 解决办法1. 禁止复制,把拷贝操作定义 ...
分类:
编程语言 时间:
2018-06-18 16:10:04
阅读次数:
191
记住: 为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源。 两个常被使用的RAII类分别是tr1::shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它(被复制物)指向null。 使用auto ...
分类:
编程语言 时间:
2018-06-18 13:29:41
阅读次数:
169
记住:拷贝函数应该确保复制“对象内的所有成员变量”及“所有父类成分”。不要尝试以某个拷贝函数实现另一个拷贝函数。应该将共同机能放进第三个函数中,并由两个拷贝函数共同调用。下面是一个类实现了自己的拷贝函数,一起正常。 但如果你为class添加一个成员变量,你必须同时修改拷贝函数。如果忘记了,编译器不会 ...
分类:
编程语言 时间:
2018-06-17 16:02:25
阅读次数:
146
solved 7 (2/59) A Chess B B - Triangle in a Triangle C - Candy division D - Effective network E - Collection F - Mattress Run J - Box Hedge K - ACM ...
分类:
其他好文 时间:
2018-06-16 13:36:08
阅读次数:
293
Item 15 使类和成员的可访问性最小化 1、一个设计的好的组件应该隐藏它的所有实现细节,清晰地将它的 API 以及具体实现分开。 2、尽可能的使用低级别的访问级别,降低类和成员的可访问性。 3、如果一个包私有的顶层类或接口只被一个类使用,考虑将它变为私有的静态内部类。 3、设计类的时候首先设计你 ...
分类:
编程语言 时间:
2018-06-15 20:58:24
阅读次数:
177
如果是自我赋值,那rhs.pb就已经被delete pb了。 ...
分类:
编程语言 时间:
2018-06-15 16:12:22
阅读次数:
201
记住:在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class。 解决方法 注意,定义createLogString为static, 避免意外使用BuyTransaction对象内尚未初始化的成员变量。 ...
分类:
编程语言 时间:
2018-06-11 22:45:20
阅读次数:
277
记住:带多态性质的基类应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。class的设计目的如果不是作为基类使用,或不是为了具备多态性,就不该声明virtual析构函数。 解决这个问题,只需要 virtual函数的目的是允许deri ...
分类:
编程语言 时间:
2018-06-10 22:09:33
阅读次数:
257