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