2011-03-27 89 views
0

有沒有人有異常類的源代碼副本? 我想研究它的實現。 感謝

編輯:我正在尋找的std ::例外
我感興趣,因爲我想知道的構造是如何發生一個char *並初始化它的成員變量,以及如何拷貝構造函數,賦值運算符是在這個班上完成。C++異常類源代碼

回答

1

在C++中沒有基類「異常類」:您可以拋出幾乎任何東西,即使是intthrow 42;非常有效)。

如果你正在談論std::exception類,那麼它幾乎沒有任何成員函數實際上需要做任何事情(what()只需要返回一個指向某個C字符串的指針)。以下將是一個完全正確的實現:

struct exception { 
    exception() throw() { } 
    exception(const exception&) throw() { } 
    exception& operator=(const exception&) throw() { } 
    virtual ~exception() throw() { } 
    virtual const char* what() const throw() { return "o noez! an exception!"; } 
}; 

標準庫中的異常類,允許你指定自己的字符串(例如,std::runtime_error)使用std::string。他們不應該進行任何手動內存管理,因爲他們可以使用std::string。 (從技術上講,內部實現不必使用std::string,但它的構造函數必須使用std::string。)