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

条款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))