Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2013, 00:52   #21
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Плохо, но только если функция использует неинициализированные данные объекта. С таким же успехом можно утверждать, что делить плохо, потому что можно разделить на нуль.
еще вроде где то есть косяк с виртуальными функциями, толи в конструкторе толи в деструкторе, не помню.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.10.2013, 01:19   #22
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
еще вроде где то есть косяк с виртуальными функциями, толи в конструкторе толи в деструкторе, не помню.
И там, и там. Только не прям косяк. Просто управление в этих случаях не передается в виртуальную функцию производного класса, даже если по факту у нас объект именно производного класса.
still_alive вне форума Ответить с цитированием
Старый 14.10.2013, 01:19   #23
Пaвeл
Пользователь
 
Аватар для Пaвeл
 
Регистрация: 08.11.2008
Сообщений: 47
По умолчанию

Цитата:
Сообщение от still_alive Посмотреть сообщение
Объект грохается сам, а исключение передается дальше. Я не могу понять, в чем проблема?
Все проблема была в путанице между тем что делает деструктор и как происходит удаление объекта.
Если я сейчас все правильно понял, то можно написать так
MyClass::MyClass(...) {
...
this->~MyClass();
throw <исключение>;
...
}
и все будет работать. Т.е. при таком вызове деструктора убьются только сгенерированные классом поля (ну если я деструктор напишу правильно ), а после выполнения throw исчезнет и сам класс.
Я не знаю, как должно быть, но вы делаете всё не правильно ©
Пaвeл вне форума Ответить с цитированием
Старый 14.10.2013, 01:23   #24
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Пaвeл Посмотреть сообщение
Все проблема была в путанице между тем что делает деструктор и как происходит удаление объекта.
Если я сейчас все правильно понял, то можно написать так
MyClass::MyClass(...) {
...
this->~MyClass();
throw <исключение>;
...
}
и все будет работать. Т.е. при таком вызове деструктора убьются только сгенерированные классом поля (ну если я деструктор напишу правильно ), а после выполнения throw исчезнет и сам класс.
Не надо явно вызывать деструктор. Потому что деструктор должен выглядеть так, чтобы чистить всегда весь объект. Если хочешь что-то почистить перед тем как бросить исключение, сделай это в отдельной private-функции.
still_alive вне форума Ответить с цитированием
Старый 14.10.2013, 09:31   #25
Пaвeл
Пользователь
 
Аватар для Пaвeл
 
Регистрация: 08.11.2008
Сообщений: 47
По умолчанию

Цитата:
Сообщение от still_alive Посмотреть сообщение
Не надо явно вызывать деструктор. Потому что деструктор должен выглядеть так, чтобы чистить всегда весь объект. Если хочешь что-то почистить перед тем как бросить исключение, сделай это в отдельной private-функции.
Вот что-то теперь я совсем запутался....
Тогда такой вопрос, вот в этом коде правильно описан деструктор, все ли я удаляю или нет? И если правильно, то почему тогда происходит утечка памяти?
http://dumpz.org/695149/
Я не знаю, как должно быть, но вы делаете всё не правильно ©
Пaвeл вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с памятью Mr_ViK Win Api 13 16.01.2012 01:53
работа с памятью в VB Mr_ViK Помощь студентам 1 14.01.2012 16:54
Работа с памятью GrihaI Общие вопросы C/C++ 0 14.05.2010 18:18
Работа с памятью getUp Общие вопросы C/C++ 6 19.01.2010 01:11
С# работа с памятью Anton07 Помощь студентам 0 13.12.2009 23:06