核心:
我们在写程序的时候应该避免返回handles,References、指针和迭代器统统都是所谓的handles,(号码牌,用来取得某个对象),而返回一个“代表对象内部数据”的handle,随之而来的便是“降低对象封装性”的风险,同时,一如稍早所见,他也可能导致“虽然调用const成员函数但是却造成了对象状态被改变”。
这个条款的遵循有利于增加封装性,帮助const成员函数的行为像一个const,并将发生“虚吊号码牌”(dangling handles)的可能性降至最低。
虚吊号码牌:dangling handles,也就是说handle还存在的情况下,handle所指之物已经被销毁了。
为异常安全的努力是值得的。
当异常被抛出时,带有异常安全性的函数:
1.不泄露任何资源
2.不允许数据败坏
异常安全函数提供以下三个保证之一:
1.基本承诺:如果异常被抛出,程序内的任何事物仍然保持在有效的状态下。没有任何对象或数据结构会因此而败坏,所有对象都处于一种内部前后一致的状态。
2.强烈保证:如果异常被抛出,程序状态不改变.调用这样的函数需有这样的认知:如果函数成功,就是完全成功,如果函数失败,程序会回复到“调用函数之前”的状态。
3.不抛掷保证,承诺绝不抛出异常,因为他们总是能够完成它们原先承诺的功能。
inline函数的使用
1)将大多数的inlining限制在小型、被频繁调用