国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何簡化臨時內存的分配與釋放

2019-11-17 05:33:30
字體:
來源:轉載
供稿:網友

  描述:在編制 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();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛隆县| 保山市| 镇平县| 盖州市| 兰州市| 房产| 县级市| 故城县| 宁强县| 韩城市| 阿巴嘎旗| 乐昌市| 沿河| 大渡口区| 临邑县| 平安县| 张北县| 赤城县| 泸水县| 天等县| 佛山市| 克山县| 包头市| 布尔津县| 灵武市| 天柱县| 溧水县| 金阳县| 新巴尔虎左旗| 获嘉县| 密云县| 靖安县| 阿合奇县| 舞钢市| 新田县| 沭阳县| 湖口县| 邢台市| 巴南区| 西和县| 鸡东县|