三、资源管理
Resource Management
13:以对象管理资源
Use objects to manage resources
1、像auto_ptr、share_ptr那样管理对象
2、auto_ptr被销毁时会自动删除所指对象,所以不要让多个autp_ptr指向同一个对象。如果以copy构造函数或者copy_assignment操作符复制他们,他们会变为null,而复制所得的新的指针或获得资源的唯一拥有权。STL容器容不得auto_ptr。
3、share_ptr属于RCSP(reference-counting smart pointer 引用型计数指针),但是不能打破环形引用。
4、auto_ptr和share_ptr都在析构函数内做delete操作,但不是delete[],所以不能让他们指向数组。Boost库中拥有可以指向数组的智能指针。
14、在资源管理类中小心copying行为
Think carefully about copying behavior in resource-managing classes
1、share_ptr允许指定删除器,能够自定义删除操作。
2、复制RAII(Resource Acquisition Is Initialization,资源取得时机便是初始化时机)对象必须一并复制它所管理的对象。
15、在资源管理类中提供对原始资源的访问
Provide access to raw resources in resource-managing classes
对原始资源的访问可能经由显示转换或隐式转换,隐式转换更方便但是不安全。
16、成对使用new和delete时要采取相同形式
Use the same form in correspinding uses of new and delete
new与delete搭配,new[ ]与delete[ ]搭配,为避免出错,尽量不要对数组进行typedef操作。
17、以独立语句将newed对象置入智能指针
Store newed objects in smart pointers in standalone statements
以独立语句将newd对象存储于智能指针内,如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露。