#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...