簡易實現auto_ptr智能指針

智能指針能夠自動釋放動態內存的指針。主要的機制就是用一個類來將指針包裹起來,然後在類的實例析構的時候自動釋放內存。

今天自己實現C++標準庫的傳統的auto_ptr智能指針。如果不是自己編寫的智能指針,運行時要加 -std=c++11選項,因爲c++11標準裏定義了智能指針。

#include <iostream>
using namespace std;

template<typename T> //用模板
class mauto_ptr{
    T* ptr;//被包裹的真正的指針
    public:
    mauto_ptr(T *_ptr=NULL):ptr(_ptr){}
    ~mauto_ptr()
    {
        //核心功能
        delete ptr;//釋放ptr指向的那塊內存
        cout<<"mauto_ptr析構,釋放內存"<<endl;
    }
    //輔助功能,支持*ptr這種寫法
    T operator*()
    {
        return *ptr;
    }
    //賦值運算符重載
    mauto_ptr& operator=(mauto_ptr &r)
    {
        ptr=r.ptr;//將當前指針指向右值對象裏的指針指向的空間
        r.ptr=NULL;//完後讓右值對象的指針爲空
        return *this;
    }
};

int main(void)
{
    mauto_ptr<double> ptr(new double(3.14));
    cout<<*ptr<<endl;
    mauto_ptr<double> ptr1;
    ptr1=ptr;

    // cout<<*ptr<<endl;  //舊的指針ptr1已經指向不了原來的空間,解NULL指針會發生斷錯誤
    cout<<*ptr1<<endl;
    //並沒有寫釋放內存的語句,會自動釋放
}

運行結果:
這裏寫圖片描述
從結果可以看出,auto_ptr智能指針的作用是不需要用戶自己釋放內存,它是在自己的類的實例析構的時候自動釋放內存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章