![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
cppGhost |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 24.4.2013 Репутация: нет Всего: нет |
Доброго времени суток. Написал такой код:
как мне казалось, вызов исключения в деструкторе производного класса, должен вызвать ситуацию, когда деструктор базового класса вызван не будет. однако, "hey" пишется. MSVS 2008. Это сообщение отредактировал(а) cppGhost - 27.7.2016, 20:04 |
|||
|
||||
cppGhost |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 24.4.2013 Репутация: нет Всего: нет |
Блин. Я совсем ничего не понимаю. Загнал этот код в онлайн компилятор. Если поставить стандарт 98, то деструктор вызывается. Если х11 или х14, то не вызывается.
Что там такое поменялось то?) |
|||
|
||||
DarthTon |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 7.2.2009 Репутация: нет Всего: 6 |
В 11 стандарте деструкторы сделали noexcept по-умолчанию. Что б код вел себя как 98 стандарт, надо добавить noexcept(false) к деструкторам. Но это не тот случай всё равно, дестурктор базового класса быдует вызыван при раскрутке стека во время обработки исключения.
|
|||
|
||||
cppGhost |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 24.4.2013 Репутация: нет Всего: нет |
Ну почему же он должен быть вызван? По выходу из области видимости разрушается переменная obj и вызывается её деструктор. Сначала деструктор класса Ex, после которого должен быть вызван деструктор класса O. Но вызывается исключение деструктор O не должен вызываться! Или что именно я путаю?
|
|||
|
||||
cppGhost |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 24.4.2013 Репутация: нет Всего: нет |
Мне тут немного объяснили еще. Получается, что вызов необработанного исключения в деструкторе в 11ом стандарте и выше сразу приводит к terminate. А в 98ом стандарте есть пункт типа
поэтому в 98ом деструктор базового класса и вызывается |
|||
|
||||
Starikan |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 25.10.2007 Репутация: нет Всего: -15 |
в масстве попиши, тогда по атрибутам вызыавться будет и скомпилируется нормально
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |