首页 > 其他 > 详细

《Effective C艹》读书笔记(9)

时间:2015-09-11 02:06:20      阅读:260      评论:0      收藏:0      [点我收藏+]

条款13:以对象管理资源

? ? 这一个条款主要介绍了auto_ptr 和 shared_ptr。这是c++的两种智能指针类型。

?

? ? 对于一般在堆上分配的指针,我们需要在程序退出之前对其进行delete,否则就会造成内存泄漏。

?

    base* ba = new base();
    delete ba;

? ? ?然而我们并不能保证每次都能正常的将生成在堆内的对象给删除,这时候就需要智能指针了。

?

? ? ?智能指针的好处在于,每次程序退出时都会自动的将指向的对象删除,避免了内存泄漏。

? ? 智能指针的定义方法如下

?

    auto_ptr<base>ap(new base(1));
    shared_ptr<base>sp(new base(1));

?

?

auto指针和shared指针的区别在于auto_ptr的赋值是掠夺性的,而shared_ptr可以通过一个count计数使得多个指针指向一个对象.

    auto_ptr<base>ap(new base(1));
    auto_ptr<base>ap1(ap);   //进行了赋值之后,ap1取得了对象的所有权,而ap指向null

?

    shared_ptr<base>ap(new base(1));
    shared_ptr<base>ap1(ap);  //ap和ap1共享对象所有权

?

要注意两点

auto_ptr不支持STL容器,因为容器要求“可复制”,但auto_ptr只能有一个掌握管理权。

auto_ptr和shared_ptr也不能用于数组,因为内部实现的时候,用的是delete,而不是delete[]

《Effective C艹》读书笔记(9)

原文:http://bbezxcy.iteye.com/blog/2242517

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!