智能指针类模板(上)——STL中的智能指针

智能指针类模板
智能指针本质上就是一个对象,它可以像原生指针那样来使用。

智能指针的意义
-现代C++开发库中最重要的类模板之一
-C++中自动内存管理的主要手段
-能够在很大程度上避开内存相关的问题

  1.内存泄露,在测试阶段很难发现。造成的原因就是申请堆空间中的内存,忘记释放。 

  2.多次指针释放:一个指针指向了一片堆空间中的内存,这片内存只需要释放一次,如果在代码中不小心释放了多次,后果也是不确定的,有可能程序马上会死掉,有可能程序过一段时间才死掉。

STL中的智能指针auto_ptr
-生命周期结束时,销毁指向的内存空间
-不能指向堆数组,只能指向堆对象(变量)——如果使用堆数组,可以使用上篇博客中的heapArray
-一片堆空间只属于一个智能指针对象
-多个智能指针对象不能指向同一片堆空间

 auto_ptr使用初探

复制代码
#include <iostream>
#include <string>
#include <memory>

using namespace std;

class Test
{
    string m_name;
public:
    Test(const char* name)
    {
        cout << "Test(const char* name)" << endl;
        m_name = name;
    }
    void print()
    {
        cout << "I'm" << m_name << endl;
    }
    ~Test()
    {
        cout << "~Test()" << endl;
    }
};

int main()
{
    auto_ptr<Test> pt(new Test("hello world") );
    pt->print();
    cout << "pt= " << pt.get() << endl;  //pt.get返回指向的堆空间的起始地址

    auto_ptr<Test> pt1(pt);
    pt1->print();
    cout << "pt= " << pt.get() << endl;
    cout << "pt1= " << pt1.get() << endl;

    return 0;
}
复制代码

STL中的其它智能指针
-shared_ptr
  带有引用计数机制,支持多个指针对象指向同一片内存
-weak_ptr
  配合shared_ptr而引入的一种智能指针

-unique_ptr
  一个指针对象指向一片内存空间,不能拷贝构造和赋值

原文地址:https://www.cnblogs.com/bruce1992/p/14321629.html