Effective C++ 条款13

以对象管理资源 Use objects to manage resources

正常情况下,我们都是通过delete p 这种方式来管理资源,比如指针。内存只是资源的一种,还有文件描述器,互斥锁,数据库链接,socket等。这种通过delete 的方式来释放资源没有错误,但是如果代码逻辑复杂,且在delete 之前有return 语句,这样会导致delete 不能执行,就会导致资源无法释放。

所以我们有两种方式来管理:

std::auto_ptr,这个是智能指针,析构函数会自动对其所指对象调用delete。由于auto_ptr 被销毁时会自动删除所指对象,所以我们不能使用多个auto_ptr 指向同一个对象。如果在auto_ptr对象上使用赋值,那么当前对象会被设置为null,赋值操作符左边的对象会获得唯一的控制权。

特别说明:STL容器要求其元素发挥正常的复制行为,因此这些容器容不得auto_ptr。

 

std::tr1::shared_ptrs 允许同时指向一个对象,当所有的对象销毁时,所指的对象会执行delete。

 

以上两种,都是执行delete,不是执行delete []。

 

posted on 2017-09-05 15:37  ^~~^  阅读(129)  评论(0编辑  收藏  举报

导航