智慧型指標 AutoPtr

2021-08-20 12:21:39 字數 1473 閱讀 7702

#include #include #include using namespace std;

void func()

~autoptr()//析構函式來負責釋放

void test()

catch(exception &e)

~autoptr()//析構函式來負責釋放

private:

t * _ptr;

};struct aa

;void func()

void test()

catch(exception &e)

autoptr(autoptr& p1):_ptr(p1._ptr)

~autoptr()//析構函式來負責釋放

return *this;

} t* getptr()

t & operator*()

t* operator->()

private:

t * _ptr;

};struct aa

;void func()

void test()

catch(exception &e)

autoptr(autoptr& p1):_ptr(p1._ptr)

~autoptr()//析構函式來負責釋放

return *this;

} t* getptr()

t & operator*()

t* operator->()

private:

t * _ptr;

bool _owner;

};struct aa

;void func()

autoptr(autoptr& p1):_ptr(p1._ptr)

~autoptr()//析構函式來負責釋放

return *this;

} t* getptr()

t & operator*()

t* operator->()

private:

t * _ptr;

bool _owner;

};struct aa

;void func1(autoptrp)//這裡也是會進行拷貝構造乙個物件p(owner)

{ cout<

(*p1)._a=20;

autoptrp2(p1);

autoptrp3(p2);

func1(p3);

//這裡將owner做為引數傳過去,這裡進行值傳遞

(*p1)._a=30;

cout<

這裡因為編譯器不處理的不同,在vs下才會觸發異常,linux下時可以正常跑過的。

auto_ptr是一種不太好的方法。在下一節中介紹scoped_ptr的使用

完,

auto ptr智慧型指標

1 class auto ptr 這個智慧型指標應該保證,無論在何種情形下,只要自己被摧毀,就一定連帶釋放其所指資源。而由於智慧型指標本身就是區域變數,所以無論是正常退出,還是異常退出,只要函式退出,它就一定會被銷毀。注意 auto ptr不允許使用一般指標慣用的賦值 assign 初始化方式。必須...

stl智慧型指標auto ptr

感覺auto ptr還是存在一些不足的,效率十分低,而且丟失了一般指標方便常用的操作,如 等,auto ptr只過載了 這幾個操作符,所以使用很不方便。一 說明 int a null delete a do nothing 應此auto ptr的析構函式是這樣子的 auto ptr 二 auto p...

stl智慧型指標auto ptr

感覺auto ptr還是存在一些不足的,效率十分低,而且丟失了一般指標方便常用的操作,如 等,auto ptr只過載了 這幾個操作符,所以使用很不方便。一 說明 int a null delete a do nothing 應此auto ptr的析構函式是這樣子的 auto ptr 二 auto p...