Если обработка исключений не разрешена, Каким образом можно остановить создание объекта класса, если переданный параметр найден неправильно? - PullRequest
0 голосов
/ 05 августа 2011
class Date
{
    Date(int day, int month, int year) {     }
}
int main()
{
    Date d = Date(100, 2, 1990);
}

Здесь значение (100), переданное в день, неверно. Мой вопрос: как параметр day может быть проверен в конструкторе, чтобы предотвратить создание объекта. Обратите внимание, что обработка исключений не допускается

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Один из аргументов, часто выровненных против современных методов программирования на C ++, таких как RAII, заключается в том, что их нельзя использовать в отсутствие исключений, поскольку исключения являются единственным способом сообщить о неудаче конструктора. И это абсолютно верно.

Единственный способ справиться со средой, где исключения не разрешены, - это удалить инициализацию из конструктора. Сделайте это в функции-члене или что-то в этом роде.

Просто запомните: среды без исключений не соответствуют действительности C ++. Вы должны относиться к ним больше как к С-классам.

2 голосов
/ 05 августа 2011

Однажды я поговорил с разработчиками программного обеспечения, которые разрабатывали на eCos проект C ++ и не имели исключений C ++, поддерживаемых компилятором.В результате они не использовали бросающие исключения в конструкторах.

Их подход состоял в том, чтобы использовать простые конструкторы, подобные этому

Date::Date()
 :
 initialized_ (false)
{}

, а затем всегда использовалась функция init:

bool Date::init(int day, int month, int year)
{
    // return false if there is an error while initializing the object
    // return true if there is no error
    initialized_ = true;

}

Они всегда проверяли результат init() функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...