Item13:以对象管理资源(智能指针)
Use objects to manage resources.
RAII(Resource Acquisition Is Initialization):资源获取时便是初始化时。
Item14:在资源管理类中小心copying行为
Think carefully about copying behavior in resource-managing.
shared_ptr使用注意点:
当处理Mutex互斥器对象时,有lock和unlock函数。
void lock(Mutex *pm);
void unlock(Mutex *pm);
Mutex m; //构造时lock,析构时unlock
shared_ptr<Mutex> sp(&m);
用shared_ptr管理时,当引用计数为0时,sp将释放所指对象,可以通过显示指定删除器来解决。
shared_ptr<Lock> sp(&l, unlock);
引用计数为0时,对该互斥对象解锁。
Item15:在资源管理类中提供对原始资源的方向
Provide access to raw resources in resource-managing classes.
- shared_ptr通过get函数来获取原始指针。
- 隐藏了客户不需要的部分,但备妥客户所需的但所有东西
Item16:成对使用new和delete时要采取相同形式
Use the same form in corresponding uses of new and delete.
Item17:以独立语句将newed对象置入智能指针
Store newed objects in smart pointers in standalone statements.
fun(shared_ptr<A>(new A),g());
如果运行顺序如下(编译器对语句内进行优化)
①new A
②g( )
③shared_ptr构造函数
若g( )抛出异常则会导致内存泄漏,为了避免此类语句的潜在危害,我们应该这样写:
shared_ptr<A> sp(new A); //以独立语句将newed对象置入智能指针中
fun(sp,g());