上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要: 为防止资源泄漏,请使用RAII(Resource Acquisiton Is Initialization) 对象,它们在构造函数中获得资源并在析构函数中释放资源。 两个常被使用的RAII classes 分别是tr1::shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为 阅读全文
posted @ 2015-01-30 21:16 智者无惧 阅读(117) 评论(0) 推荐(0) 编辑
摘要: Copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”。 不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个coping函数共同调用。如果你发现你的copy构造函数和copy assignment操作符有相近的代码 阅读全文
posted @ 2015-01-30 11:34 智者无惧 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 确保当对象自我赋值时operator=有良好行为。其中技术包括比较“来源 对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap. 确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。 阅读全文
posted @ 2015-01-30 10:29 智者无惧 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 比如: Widget& operator=(const Widget& rhs) { ... return* this; } 令赋值(assignment)操作符返回一个reference to *this 阅读全文
posted @ 2015-01-29 17:44 智者无惧 阅读(99) 评论(0) 推荐(0) 编辑
摘要: 在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层)。 阅读全文
posted @ 2015-01-29 17:30 智者无惧 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序。 如果客户需要对某个操作函数运行期间抛出的异常作出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。 阅读全文
posted @ 2015-01-29 11:48 智者无惧 阅读(93) 评论(0) 推荐(0) 编辑
摘要: polymorphic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。 Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性(polymorphically 阅读全文
posted @ 2015-01-27 17:50 智者无惧 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 为驳回编译器自动提供的功能,可将相应的成员函数声明为private并且不予实现。 使用像Uncopyable这样的base class也是一种做法(即先声明一个基类,然后私有继承它)。这其实有点像使用Boost提供的版本,那个class名为noncopyable。 阅读全文
posted @ 2015-01-22 11:59 智者无惧 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 面对“内含reference成员或者含const成员”的class内支持赋值操作,你必须自己定义copy assignment操作符。 如果某个base classes将copy assignment操作符声明为private,编译器将拒绝为其derived classes 生成一个copy ass 阅读全文
posted @ 2015-01-22 11:25 智者无惧 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 为内置型对象进行手工初始化,因为C++不保证初始化它们。 构造函数最好使用成员初值列,而不要在构造函数本体内使用赋值操作。初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同。 为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local stati 阅读全文
posted @ 2015-01-19 16:30 智者无惧 阅读(100) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页