![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
FreshMeat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
Пара ссылок - разный взгляд на проблему:
http://www.joelonsoftware.com/items/2003/10/13.html http://www.nedbatchelder.com/text/exceptio...-vs-status.html Вторая статья и ее обсуждение - просто супер Взято здесь: http://rsdn.ru/Forum/Message.aspx?mid=479157&only=1 |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Судя по всему, такой возможности в С++ нет. Даже если рассудить логически, как ее реализовать, я - например, ума не приложу. Я наивно предполагал, что можно задать исключительную ситуацию, описать ее, и приложение будет само генерить исключение там, где такая ситуация возниакет, т.е. мне, как юзеру не придется делать проверку, что указатель нулевой и писать throw null_ptr, это за меня сделает компилятор. На самом же все придется проверять самому и генерить throw.
Но с другой стороны, в винде же это как-то реализовано... Т.е. определяет же система, что юзер долбится по нулевому адресу. Может быть, конечно, это все можно реализовать на С++, но затраты будут несоизмеримы с премуществами. |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
я думаю винда также определяет, но ты можешь автоматизировать этот процесс. взять, например, перегрузить оператор -> вставить условие на нулевой поинтер, и если оператору -> передается ноль, то сгенерить исключение только конечно накладные расходы увеличаться ![]() |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Да, это будет работать, но только для пользовательских типов, а как быть тогда с указателями на встроенные типы? К тому же проверять-то все равно придется. Можно, в принципе, создать какой-нить класс, который будет являться базовым для всех классов приложения, определить для него оный опрератор и запускать его во всех дочерних. Можно эмулировать также работу встроенных типов. Круто! Тогда нужно будет грамотно реализовать классовую иерархию, чтобы при добавлении нового исключения не переписывать все классы, но это уже проблемы другого плана. Спасибо за идею.
|
|||
|
||||
FreshMeat |
|
||||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
То о чем ты здесь пишешь, не имеет отношения к исключениям с++ и больше напоминает систему ИИ. Причем необычайно мощную. Судя по описанию, компилятор сам должен определить в каких условиях требуется проверять соответствие текущего состояния программы твоим условиям, причем умудряться это делать без потери производительности. Сам понимаешь, задачка не из легких ![]() О том, что такое исключения, лучше всего почитать Страуструпа, в закреплении материала - статьи и их обсуждения. Хотя бы те две, ссылки на которые, я приводил выше. А проверку на нулевой указатель можно произвести напрмер так:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |