摘要: 宁可拿non-member non-friend函数替换member函数。这样做可以增加封装性、包裹弹性(packaging flexibility)和机能扩充性。 阅读全文
posted @ 2015-03-10 21:13 智者无惧 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允诺约束条件获得保证,并提供class作者以充分的实现弹性。 protected并不比public更具有封装性。 阅读全文
posted @ 2015-03-10 17:20 智者无惧 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 绝不要返回pointer或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个local static对象而有可能同时需要多个这样的对象。条款4已经为“在单线程环境中合理返回refer 阅读全文
posted @ 2015-03-10 10:38 智者无惧 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 尽量以pass-by-reference-to-const替换pass-by-value。前者通常比较高校,并可避免切割问题(slicing problem). 以上规则并不适用于内置类型,以及STL的迭代器和函数对象。对它们而言,pass-by-value往往比较适当。 阅读全文
posted @ 2015-03-09 22:15 智者无惧 阅读(106) 评论(0) 推荐(0) 编辑
摘要: Class的设计就是type的设计。在定义一个新type之前,请确定你已经考虑过本条款覆盖的所有讨论主题。 新type的对象应该如何被创建和销毁? 对象的初始化和对象的赋值该有什么样的区别? 新type的对象如果被passed by value(以值传递),意味着什么? 什么是新type的“合法值” 阅读全文
posted @ 2015-03-09 21:37 智者无惧 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 好的接口很容易被正确使用,不容易被误用。你应该在你IDE所有接口中努力达成这些性质。 “促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。 “阻止误用"的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。 tri::shared_ptr支持定制型删除器(cu 阅读全文
posted @ 2015-03-08 21:14 智者无惧 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 以独立语句将newed对象存储于(置入)智能指针内。如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露。 阅读全文
posted @ 2015-02-01 21:43 智者无惧 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。 阅读全文
posted @ 2015-02-01 21:15 智者无惧 阅读(92) 评论(0) 推荐(0) 编辑
摘要: APIs往往要求访问原始资源(raw resources),所以每一个RAII class应该提供一个“取得其所管理之资源”的办法。 对原始资源的访问可能经由显示转换(.get()成员函数或者指针取值操作符->,*)或隐式转换(提供隐式转换函数)。一般而言显示转换比较安全,但隐式转换对客户比较方便。 阅读全文
posted @ 2015-01-31 21:03 智者无惧 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 复制RAII对象必须一并复制它所管理的资源,所以资源的copying行为决定RAII对象的copying行为。 普遍而常见的RAII class copying行为是:抑制copying(使用私有继承Uncopyable)、施行引用计数法(reference counting)(即std::tr1: 阅读全文
posted @ 2015-01-31 10:38 智者无惧 阅读(133) 评论(0) 推荐(0) 编辑