C 標準庫auto ptr指標的應用

2021-06-03 05:59:06 字數 1743 閱讀 7235

在進行學習windows程式設計的時候,要使用大量的api和訊息對控制項進行操作,雖然很煩亂,但是對於學習和研究還是很有用處的。

雖然以前學了一點的mfc,但是對於mfc的使用其實是一知半解,也沒有入門。

現在重新使用c++的方法進行sdk的封裝學習,對於自己是乙個很好的興趣點。

之前,一直沒有好好學下c++,感覺好像用不到。因為在mfc中,放乙個按鈕,雙擊一下,乙個函式自動生成了。

我感覺這樣的方法對我的學習沒有好處。

還是從基礎的sdk進行學習吧,將學到的c++知識用起來。

今天封裝了幾個很常的控制項類:

tbutton

tedit

tlistbox

tcombox;

將這些常用控制項按照mfc的格式全部封裝,在寫程式時方便多了。不用老是查詢msdn說明,省了不少事。

問題出現了。我在tform視窗中有很多的控制項成員類

private://成員控制項物件

tbutton* cmdok;

tcheckbox* chktest;

tradiobox* radtest;

tbutton* cmdtest;

tedit* edittitle;

tbutton* cmdcobox;

tcombox* cobtest;

tlistbox* lbtest;

tbutton* cmdlbox;

這麼多的控制項成員,我要在函式中進行初始化,例:

//控制項成員初始化

//lresult umain::oninitalize(wparam wp,lparam lp)

視窗退出時,還要進行乙個消毀記憶體的操作,

//燒毀控制項成員

//lresult umain::onuninitalize()

要寫這麼多的**,我感覺自己好業餘啊。我很擔心,要是中途出錯了。我的onuninitalize函式沒有執行,omg,什麼破程式啊。發現這個問題,我感覺好鬱悶啊。異常也知道如何處理,我感覺能捕獲的異常,我沒有必要捕獲了,我要捕獲的是那種不能捕獲的異常,比如buff溢位之類,記憶體越界之類的事情。現在弄得異常處理都不想去學了。 百無聊懶,在看書的過程中發現cmdtest型別,在類消毀的時候,這個指標對應的東西也會消毀掉吧?修改後的初始化函式,

//控制項成員初始化

//lresult umain::oninitalize(wparam wp,lparam lp)

問題又來了,本打算auto_ptrcmdtest (new tbutton(_hwnd,idcancel));直接定義我的按鈕指標,事於願反,發現只要離開這個函式,我的cmdtest指標也消毀掉了。這也太不智慧型了。只好弄個臨時變數轉存一下。至少,有了這一招,我不用去delete我的成員物件了。例項化函式,還要改進,還沒有想到好的辦法,總覺得寫這麼一大堆的**,太業餘了。。。。鬱悶,剛剛接觸auto_ptr,還不知道如何用。鬱悶中。。。

。。。。原來是書沒有看完,就上馬了。這下知道如何定義乙個auto_ptr後進行賦值了。

例:auto_ptr(tbutton)ptrbuttonok;

ptrbuttonok = auto_ptr(tbutton)(new tbutton(_hwnd,idc_button1));//這樣就可以正確賦值。不用臨時轉存了。

好東西,寫在這裡備忘,好好掌握,臨活運用。c++stl還有很多的好東西等著我呢。

C 智慧型指標 auto ptr

智慧型指標 auto ptr vc版本 擁有權管理和轉移 當乙個智慧型指標給另乙個智慧型指標初始化的時候,兩個智慧型指標將會同時指向乙個空間,這樣在物件析構的時候,會導致一塊空間釋放多次的問題,所以乙個物件從始至終只能擁有乙個智慧型指標,這樣就保證不會乙個物件多次釋放的問題.我們讓指標給指標初始化的...

C 智慧型指標(auto ptr)

智慧型指標 在c 中使用堆記憶體是非常頻繁的操作,堆記憶體的申請和釋放都由程式設計師自己管理。使用普通指標,容易造成堆記憶體洩露,二次釋放等問題,使用智慧型指標能更好的管理堆記憶體。c 11中引入了智慧型指標的概念,方便管理堆記憶體。棧 堆區別 棧 系統開闢 系統釋放 堆 手動開闢 手動釋放 設計 ...

C 智慧型指標auto ptr

template class auto ptr 建構函式 templateinline auto ptr auto ptr t p pointee p 拷貝建構函式 templateinline auto ptr auto ptr auto ptr rhs pointee rhs.release t...