![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
srd
Some obj; try { Some obj2; } catch(...) { // // // } Для каких обьектов будет вызван деструктор при возникновении исключения ? |
|||
|
||||
srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Так как в твоём примере нигде нет инструкции throw, то могу предположить, что исключение бросается внутри конструктора класса Some.
а) Если исключение будет брошено при конструировании объекта obj, то будут вызваны деструкторы для тех объектов-членов, для которых успели отработать конструкторы. Для остальных объектов-членов деструкторы вызваны не будут. Деструктор для самого obj и ob2 тоже вызван не будет. б) Если исключение будет брошено при конструировании obj2, то ни для самого obj, ни для его членов деструкторы не вызовутся. Для obj2 деструктор тоже не будет вызван. Будут вызваны деструкторы только для объектов-членов obj2, для которых успели отработать конструкторы до исключения. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
srd
Все верно... |
|||
|
||||
Helicopterr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
возвращает то ф-ция long double а не short. вобщем при использовании рекурсии надо считать сколько в этой функции выделяется памяти под переменные и умножать на предполагаемую глубину рекурсии а затем сравнвать это с 1Мб? И если получилось больше то рекурсию не использовать? И ещё правда, что рекурсия работает более медленно, чем тот же алгоритм, реализованный на циклах? Это сообщение отредактировал(а) Helicopterr - 24.10.2005, 22:42 -------------------- people can fly |
|||
|
||||
Void |
|
||||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
При чем тут возвращаемое значение? Глубина рекурсии в твоем примере равна chislo - 1.
+ параметры ф-ции. Но точный размер можно узнать, только посмотрев ассемблерный листинг сгенерированного кода.
Вообще говоря, да, но закладываться на это не стоит. Нормально раскрутить в цикл можно только хвостовую рекурсию, для остальных случаев все равно приходиться эмулировать стек вручную, что не особо повышает скорость, но существенно снижает читаемость кода.
Если получилось больше, есть существенная вероятность, что в алгоритме ошибка, или использован неподходящий алгоритм. А производить такие расчеты для каждой рекурсивной ф-ции - имхо, странное занятие. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||||
|
|||||||||
Helicopterr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
Cпасибо согласен. Однако вроде бы программный стек увеличивается динамически по мере объявления в программе новых переменных, отхватывая динамическую память "куча"? Что за информация об огораничении стека линкером в 1Мб? Это сообщение отредактировал(а) Helicopterr - 24.10.2005, 23:09 -------------------- people can fly |
|||
|
||||
Void |
|
||||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Да, это так, но 1 Мб здесь указывает именно на предельный размер, который система позволит выделить. Когда стек превышает указанный при создании потока предел, выбрасывается исключение. P.S. Забавный компилятор VC++ 8.0:
Без комментариев ![]() P.P.S. Впрочем, и за предупреждение тоже - все-таки, нехилый там анализ кода производится. Это сообщение отредактировал(а) Void - 24.10.2005, 23:37 -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||||
|
|||||||||
Helicopterr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
Void
Как вцелом компилятор VC++ 8.0? Лучше 7-го? -------------------- people can fly |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |