Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исключения, Имеет ли смысл? 
:(
    Опции темы
FreshMeat
Дата 30.1.2004, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
Jcs
Дата 30.1.2004, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 1.10.2003

Репутация: нет
Всего: нет



Судя по всему, такой возможности в С++ нет. Даже если рассудить логически, как ее реализовать, я - например, ума не приложу. Я наивно предполагал, что можно задать исключительную ситуацию, описать ее, и приложение будет само генерить исключение там, где такая ситуация возниакет, т.е. мне, как юзеру не придется делать проверку, что указатель нулевой и писать throw null_ptr, это за меня сделает компилятор. На самом же все придется проверять самому и генерить throw.
Но с другой стороны, в винде же это как-то реализовано... Т.е. определяет же система, что юзер долбится по нулевому адресу.
Может быть, конечно, это все можно реализовать на С++, но затраты будут несоизмеримы с премуществами.
PM   Вверх
bel_nikita
Дата 30.1.2004, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата
Но с другой стороны, в винде же это как-то реализовано... Т.е. определяет же система, что юзер долбится по нулевому адресу.

я думаю винда также определяет, но ты можешь автоматизировать этот процесс.
взять, например, перегрузить оператор ->
вставить условие на нулевой поинтер, и если оператору -> передается ноль, то сгенерить исключение
только конечно накладные расходы увеличаться biggrin.gif


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Jcs
Дата 30.1.2004, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 156
Регистрация: 1.10.2003

Репутация: нет
Всего: нет



Да, это будет работать, но только для пользовательских типов, а как быть тогда с указателями на встроенные типы? К тому же проверять-то все равно придется. Можно, в принципе, создать какой-нить класс, который будет являться базовым для всех классов приложения, определить для него оный опрератор и запускать его во всех дочерних. Можно эмулировать также работу встроенных типов. Круто! Тогда нужно будет грамотно реализовать классовую иерархию, чтобы при добавлении нового исключения не переписывать все классы, но это уже проблемы другого плана. Спасибо за идею.
PM   Вверх
FreshMeat
Дата 2.2.2004, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 30.1.2004

Репутация: нет
Всего: нет



Цитата(Jcs @ 30.1.2004, 18:18)
Судя по всему, такой возможности в С++ нет. Даже если рассудить логически, как ее реализовать, я - например, ума не приложу. Я наивно предполагал, что можно задать исключительную ситуацию, описать ее, и приложение будет само генерить исключение там, где такая ситуация возниакет, т.е. мне, как юзеру не придется делать проверку, что указатель нулевой и писать throw null_ptr, это за меня сделает компилятор. На самом же все придется проверять самому и генерить throw.
Но с другой стороны, в винде же это как-то реализовано... Т.е. определяет же система, что юзер долбится по нулевому адресу.
Может быть, конечно, это все можно реализовать на С++, но затраты будут несоизмеримы с премуществами.

То о чем ты здесь пишешь, не имеет отношения к исключениям с++ и больше напоминает систему ИИ. Причем необычайно мощную. Судя по описанию, компилятор сам должен определить в каких условиях требуется проверять соответствие текущего состояния программы твоим условиям, причем умудряться это делать без потери производительности. Сам понимаешь, задачка не из легких smile.gif
О том, что такое исключения, лучше всего почитать Страуструпа, в закреплении материала - статьи и их обсуждения. Хотя бы те две, ссылки на которые, я приводил выше.
А проверку на нулевой указатель можно произвести напрмер так:

Код

template <typename T>
struct iterator
{
 T& operator*()
 {
   if ( !m_value )
     throw null_ptr_exception();
   return *m_value;
 }

private:
 T* m_value;

}

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.