Генерирование исключения
Возник вопрос по поводу генерирования исключения с его последующей обработкой. Здесь вижу два пути:
1) создание своего класса исключения
2) использование класса, созданного на основе какого-либо готового класса
2 путь явно проще, но здесь возникает вопрос - какой класс из какой библиотеки использовать в качестве базового?
Есть класса CException в библиотеке MFC, а есть класс exception, который идет вместе с STL. Являюсь сторонником переносимых программ, поэтому вроде бы класс exception из STL предпочтителен. Но в приложении, в котором используется STL и MFC использование класса исключения, созданного на основе exception, может вызвать опред. сложности (напрмер,из-за того, что MFC подменяет обработчик ошибок оператора new и может генерировать свои исключения).
Подскажите, что можно сделать в этом случае?
Возник вопрос по поводу генерирования исключения с его последующей обработкой. Здесь вижу два пути:
1) создание своего класса исключения
2) использование класса, созданного на основе какого-либо готового класса
2 путь явно проще, но здесь возникает вопрос - какой класс из какой библиотеки использовать в качестве базового?
Есть класса CException в библиотеке MFC, а есть класс exception, который идет вместе с STL. Являюсь сторонником переносимых программ, поэтому вроде бы класс exception из STL предпочтителен. Но в приложении, в котором используется STL и MFC использование класса исключения, созданного на основе exception, может вызвать опред. сложности (напрмер,из-за того, что MFC подменяет обработчик ошибок оператора new и может генерировать свои исключения).
Подскажите, что можно сделать в этом случае?[/QUOTE]
Я не совсем разбираюсь в библиотеке MFC и STL, поэтому мне интересно: чем может подмена обработчика помешать работе программы? Я не думаю, что MFC так спроектирован, что использование собственных классов исключений запрещено. Да и какая для MFC разница, вывели ли Вы класс из exception или создали самостоятельно?
А то что MFC переопределяет обработчик ошибки при выделении памяти означает, что при подобной ошибки создастся исключение MFC.
Поэтому и сложно решить - что брать за основу в STL/MFC-проекте. MFC или STL классы или вообще ориентироваться на SEH...
А то что MFC переопределяет обработчик ошибки при выделении памяти означает, что при подобной ошибки создастся исключение MFC.
Поэтому и сложно решить - что брать за основу в STL/MFC-проекте. MFC или STL классы или вообще ориентироваться на SEH...[/QUOTE]
Но разве исключение, генерируемое при той же нехватке памяти влияет на остальную часть программы? Ну и пусть себе возникает, главное - правильно обработать. Я создавал приложения, использующие MFC+STL+CORBA. Исключения там летали, как черти, но все работало нормально.
Может косвенно влиять. Посмотрите ссылку
http://forum.sources.ru/index.php?showtopic=49090&st=0&#entry1166156
Не знаю как вы, но я лично всегда создавал свои классы исключений, и всё работало. И STL, и MFC, и моё.
Поэтому если и создавать свои классы исключений, лучше сделать их производными от каких-либо базовых классов - exception в STL, CException - в MFC. Первый видимо лучше (с учетом декларируемой переносимости программ STL между платформами и компиляторами).