исходный код класса исключений c ++ - PullRequest
0 голосов
/ 28 марта 2011

У кого-нибудь есть копия исходного кода для класса исключений?Я хотел бы изучить его реализацию.Спасибо

редактировать: я ищу std :: исключение
Я заинтересован в нем, потому что я хотел бы знать, как конструктор принимает символ * и инициализирует его переменную-член, и как конструктор копирования,Оператор присваивания выполняется в этом классе.

1 Ответ

1 голос
/ 28 марта 2011

В C ++ нет базового «класса исключений»: вы можете выбросить что угодно, даже int (throw 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 для внутреннего использования, но она должна брать один в своем конструкторе.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...