每一个Item都很经典,都需要去思考揣摩,我在这里将要点抽象出来,便于日后快速回忆;我只是在做文章的“搬运工”。
Item 13 使用对象管理资源
1. 当一个 auto_ptr 被销毁时,会自动删除它所指向的东西,所以不要让超过一个的 auto_ptr 指向同一个对象。如果发生了这种事情,那个对象就会被删除超过一次,而且会让你的程序进入未定义行为。为了防止这个问题,auto_ptrs 具有不同寻常的特性:拷贝它们(通过拷贝构造函数或者拷贝赋值运算符)就是将它们置为空,拷贝的指针被设想为资源的唯一所有权。
[不要将一个指针多次放入到auto_ptr或shared_ptr,否则这个指针会被释放多次]
2. auto_ptr 和shared_ptr 都在它们的析构函数中使用 delete,而不是 delete []。这就意味着不能将 auto_ptr 或 tr1::shared_ptr 用于动态分配的数组,可是那居然可以通过编译。
3. C++ 中没有可用于动态分配数组的类似 auto_ptr 或 shared_ptr 这样智能指针,那是因为vector 和 string 几乎总是能代替动态分配数组。
3. 与垃圾收集不同的是,无论如何,RCSP 不能打破循环引用(例如,两个没有其它使用者的对象互相指向对方)。
[RSCP和垃圾收集器有哪些不同?]
[auto_ptr已在C++11中被unique_ptr取代;而shared_ptr被从tr1引入到C++11]
[不要将一个指针多次放入到auto_ptr或shared_ptr,否则这个指针会被释放多次]
Item 14 谨慎考虑资源管理类的拷贝行为
1. 当auto_ptr的对象释放时,auto_ptr 总是删除它的指针。shared_ptr 的缺省行为是当它所指向的东西的引用计数变为 0 的时候将它删除;
2. shared_ptr还有一种处理方式是当引用计数变为 0 时调用的一个函数或者函数对象。(在构造函数中分别传入裸指针和函数)
[在应用计数