Я хочу создать класс с функциями, которые могут генерировать исключения, которые я хочу поймать, когда я его использую. Я унаследовал my_exception от стандартного класса исключения. Я реализую функцию what() так, чтобы она возвращала строку, которая хранится в частной строковой переменной
Я думаю, было бы лучше определить исключение как вложенный класс, как это было сделано в iostream-библиотеке с ios_base:: failure.
Что я менее уверен, где и как я должен определить объект my_excpetion. Мне хотелось бы видеть внутренний код функций iostream и посмотреть, как они это сделали. Я подумал о нескольких вариантах:
-
Для каждой причины исключения я могу определить статический экземпляр my_exception, с конструктором, который получает строку и сохраняет ее в своем личном указателе строки.
-
По каждой причине исключения я могу определить другой класс, который наследует от my_exception и реализует то, что в качестве функции возвращает постоянную строку (причина). Я могу хранить экземпляр каждого из этих подклассов исключений или бросать тип. BTW, когда мы обычно бросаем тип, а не экземпляр?
-
Я предполагаю, что это неправильно: каждый раз, когда я хочу создать исключение, создайте новое my_exception с конструктором, который получает строку. Это делается на Java, но, как я понимаю, это будет проблематично в С++, потому что исключение должно быть удалено где-то. Правильно?
Я думаю, что первый - правильный, не так ли? Есть ли более стандартные варианты?
Большое спасибо!