|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.08.2011, 07:56 | #1 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Вброс исключения с использованием new
Вот имеется такой отрывок кода:
Код:
In constructor() An exception А вот про деструктор ни слова, хотя в Code::Blocks вызов деструктора легко отследить, но он там просто не происходит. Почему так? Ведь получается, что происходит утечка памяти, не так ли? Или можно так? Код:
Последний раз редактировалось _-Re@l-_; 13.08.2011 в 07:58. |
13.08.2011, 10:38 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
естественно нужно удалять что создали(кстати у вас тип исключения MyClass* выходит)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
13.08.2011, 10:43 | #3 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Спасибо, Пепел Феникса. И всё-таки это как-то не очень удалять исключения, потому как если работаешь со сторонней библиотекой, никогда не знаешь, как там реализован вброс исключений.
|
13.08.2011, 10:54 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
значит бросайте сам объект а не указатель на него.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
13.08.2011, 10:57 | #5 | ||
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Цитата:
Цитата:
|
||
13.08.2011, 13:28 | #6 |
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
|
13.08.2011, 16:01 | #7 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Ваше throw выражение создает временный объект, который инициализируется вашим выражением. Так как значением вашего выражения является указатель, то и создается указатель. Этот-то указатель и удаляется в блоке catch. Но удаляется не с помощью delete, а удаляется как локальная переменная.
Со мной можно встретиться на www.clipper.borda.ru
|
13.08.2011, 17:33 | #8 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Сыроежка, не понял, что вы имели ввиду. Удаляется указатель или освобождается память выделенная для объекта исключения?
В общем, сразу после delete происходит вызов деструктора MyClass() - проверял. Помните, что если программист выделяет память в куче, то он сам и должен её освобождать. Насколько я помню, в противном случае случается утечка памяти. Вот, даже набросал кое-чего для проверки Код:
Последний раз редактировалось _-Re@l-_; 13.08.2011 в 17:52. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Стек и исключения | Sibedir | Общие вопросы Delphi | 7 | 20.04.2011 20:28 |
Исключения в Qt | iukash | Qt и кроссплатформенное программирование С/С++ | 6 | 16.04.2011 18:54 |
Исключения C++ | Impuls1989 | Помощь студентам | 2 | 04.03.2011 00:51 |
Исключения | yurik1982 | Фриланс | 9 | 16.02.2010 00:34 |
Исключения | Rifler | Общие вопросы Delphi | 5 | 12.11.2008 00:29 |