麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

《delphi高手突破》節(jié)選二

2019-11-18 18:42:38
字體:
來源:轉載
供稿:網友

完成了第三章 異常及錯誤處理,節(jié)選一節(jié)

構造函數與異常

這個話題在C++社區(qū)中經常會被提起,而在Delphi社區(qū)中似乎從來沒有人注意過。也許由于語言的特性,使得Delphi程序員不必關心這個問題。但我想Delphi程序員也應該對該問題有所了解,知道語言為我們提供了什么而使得我們如此輕松,不必理會它。正所謂“身在福中須知福”。
我們知道,類的構造函數是沒有返回值的,如果構造函數構造對象失敗,不可能依靠返回錯誤代碼。那么,在程序中如何標識構造函數的失敗呢?最“標準”的方法就是:拋出一個異常。
構造函數失敗,意味著對象的構造失敗,那么拋出異常之后,這個“半死不活”的對象會被如何處理呢?
在此,我想讀著有必要先對C++對這種情況的處理方式先有個了解。
在C++中,構造函數拋出異常后,析構函數不會被調用。這種做法是合理的,因為此時對象并沒有被完整構造。
如果構造函數已經做了一些諸如分配內存、打開文件等操作的話,那么C++類需要有自己的成員來記住做過哪些動作。當然,這樣做對于類的實現者來說非常麻煩,因此一般C++類的實現者都避免在構造函數中拋出異常(可以提供一個諸如Init和UnInit的成員函數,由構造函數或類的客戶去調用它們,以處理初始化失敗的情況)。而每一本C++的經典著作所提供的方案是使用智能指針(STL的標準類auto_ptr)。
在Object Pascal中,這個問題變得非常的簡單,程序員不必為此大費周折。如果Object Pascal的類在構造函數中拋出異常,編譯器會自動調用類的析構函數(由于析構函數不允許被重載,可以保證只有唯一一個析構函數,因此編譯器不會迷惑于多個析構函數之中)。析構函數中一般會析構成員對象,而Free()方法保證了不會對nil對象(即尚未被創(chuàng)建的成員對象)調用析構函數,因此在使得代碼簡潔優(yōu)美的前提下,又保證了安全。
type MyClass = class
PRivate
FStr : PChar; // 字符串指針
public
constructor Create();
destructor Destroy(); override;
end;
 
constructor MyClass.Create();
begin
FStr := StrAlloc(10); // 構造函數中為字符串指針分配內存
StrCopy(FStr, 'ABCDEFGHI');
raise Exception.Create('error'); // 拋出異常,沒有理由,呵呵
end;
 
destructor A.Destroy();
begin
StrDispose(FStr); // 析構函數中釋放內存
WriteLn('Free Resource');
end;
 
var
Obj : TMyClass;
i : integer;
begin
try
Obj := TMyClass.Create();
Obj.Free();
WriteLn('Succeeded');
except
Obj := nil;
WriteLn('Failed');
end;
 
Read(i); // 暫停屏幕,以便觀察運行結果
end.
 
在這段代碼中,構造函數拋出異常,執(zhí)行的結果是:
Free Resource
Failed
此時的“Free Resource”輸出是由編譯器自動調用析構函數所產生的。
因此,如果類的說明文檔或類的作者告知你,類的構造函數可能會拋出異常,那就要記得用try…except包住它!
C++與Object Pascal對于構造函數拋出異常后的不同處理方式,其實正是兩種語言的設計思想的體現。C++秉承C的風格,注重效率,一切交給程序員來掌握,編譯器不作多余動作。Object Pascal繼承Pascal的風格,注重程序的美學意義,編譯器幫助程序員完成復雜的工作。

上一篇:用DELPHI制作在線程序升級信息查詢

下一篇:《delphi高手突破》節(jié)選一

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 亚洲精品aaaaa | 成人做爰高潮片免费视频韩国 | 欧美精品成人一区二区在线观看 | 久草在线综合网 | 色视频一区二区 | 成人做爰高潮片免费视频韩国 | 黄色成人短视频 | 成人偷拍片视频在线观看 | h视频在线免费观看 | av在线一区二区三区 | 在线播放免费播放av片 | 国产精品一区网站 | 国产日韩线路一线路二 | 久久久久久久久久美女 | 在线播放黄色片 | 国产成人免费精品 | 国产一区免费观看 | 国产精品久久久免费观看 | 国产高潮失禁喷水爽到抽搐视频 | 一区在线不卡 | 国产品久久 | 久久久久一本一区二区青青蜜月 | 蜜桃视频最新网址 | 午夜国产精品成人 | 成人羞羞国产免费游戏 | 一级黄色片武则天 | 色婷婷久久久久久 | 亚洲午夜天堂吃瓜在线 | 免费毛片随便看 | 精品国产一区二区三区在线 | 国产无限资源在线观看 | 国产精品久久久久久久av三级 | 国产一区精品在线观看 | 免费国产在线精品 | 欧洲黄色一级视频 | 偷偷草网站 | 91麻豆精品国产91久久久更新资源速度超快 | 一级电影免费看 | 国产精品999在线观看 | 久久国产秒 | 亚洲精中文字幕二区三区 |