日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何简化临时内存的分配与释放

發布時間:2025/3/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何简化临时内存的分配与释放 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  描述:在編制 C++ 程序時,最常遇到的一個令人惱火的問題便是臨時資源的分配與釋放問題, 由于程序的邏輯關系通常很復雜,引發異常的可能性也很多,為了妥善處理運行時異常, 我們不得不在可能引發異常的任何地方釋放已分配成功的臨時資源,然后返回, 以保證程序的健壯穩定及系統的清潔,所以程序中可能隨處可見delete、free等語句, 顯得很繁! 那么有沒有辦法使得只顧分配、使用臨時資源,而不顧其后事如何呢?

  在Delphi中可以用try...finally...實現一些資源的保護,但C++Builder中好象沒有try...finally 這樣的語法結構, 所以,在程序中為了正確釋放內存等臨時資源,不得不在有可能出錯的任何地方書寫釋放語句delete,以保護有限的資源。 其實有一個較簡單的方法可以一勞永逸,即為臨時資源定義一個公共的類,將C++的new / delete語句稍作封裝即可,類的定義如下:

  

TMemory{ public: void *ptr; public: TMemory(int size){ ptr=(void*)new char[size]; _WINAPI_::ZeroMemory(ptr,size);} ~TMemory(void){ if(ptr) delete ptr; } }; 應用示例如下: void TMainForm::function(int size) { TMemory mem(size); //注意捕獲異常:EOutOfMemory! char *str=(char *)mem.ptr; //取得分配的內存指針 some_func(str); //其它操作 return; //直接返回,而不必擔心釋放內存,即使some_func中發生異常同樣會自動釋放內存 }

  如何簡化等待光標的的設置與還原 ?

  --------------------------------------------------------------------------------

  解決問題的原理同上,類的定義如下:

  

#pragma warn -bei //關閉枚舉變量賦值的警告 class TWaitCursor{//自動處理等待光標,當函數調用棧解體時自動還原光標 private: TCursor oldc; public: TWaitCursor(void) : oldc(Screen->Cursor){ Screen->Cursor = crHourGlass; } ~TWaitCursor(void){ Screen->Cursor = oldc; } };

  應用示例如下:

  

void TMainForm::function(void) { some_opr(...); //其它操作 TWaitCursor waitit; //變為等待光標 some_func(...); //其它操作 return; //直接返回,光標會自動還原 }

  當創建TWaitCursor類的臨時變量時,光標會改為等待狀態,當該函數返回時,會自動還原光標。

  注:創建自動變量時應采用如下方式,以避免Borland編譯器的自動優化:

  TWaitCursor wait;

  而不能定義成下面的樣子:

  TWaitCursor wait();

總結

以上是生活随笔為你收集整理的如何简化临时内存的分配与释放的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。