![]() |
|
Модераторы: bsa |
![]()
|
|
| wrathchildtoo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
Привет всем.
Как же всё-таки правильно размотать стек, если возникает исключительная ситуация в конструкторе. На сколько я понял при этом не вызывается деструктор объекта, в конструкторе которого возникло исключение. Например:
Как освободить память, на которую указывает ptr1? Или же существуют какие-то автоматические механизмы, которые освободят память? |
|||
|
||||
| Lazin |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
вызовется
или class A { private: char *ptr1; char *ptr2; public: A() : ptr1(0), ptr2(0) { ptr1 = new char[10]; //допустим тут всё прошло без ошибок ptr2 = new char[10]; //а тут возникла исключительная ситуация } ~A() { delete []ptr1; delete []ptr2; // в случае, если оператор new в конструкторе бросит исключение, указатель будет равен 0 } }; это то-же должно работать, так как delete 0 - вполне законная операция Это сообщение отредактировал(а) Lazin - 24.9.2009, 16:28 |
||||||
|
|||||||
| wrathchildtoo |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
Почему тогда при выполнении следующего кода:
строка "Destructor of class A\n" не выводится на экран?
|
||||||||
|
|||||||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
видимо, если искл. брошено в конструкторе, то объект является частично сконструированным |
|||
|
||||
| wrathchildtoo |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 6.4.2009 Репутация: нет Всего: нет |
Кажецо нашел ответ на свой вопрос
Lazin, спасибо за помощь Это сообщение отредактировал(а) wrathchildtoo - 24.9.2009, 17:28 |
||||||
|
|||||||
| ller |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 4.8.2008 Где: г. Таганрог Репутация: 2 Всего: 4 |
Обвернуть все выделение памяти в try catch и там уже разбираться что же произошло....
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |