Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление объекта (указателя) в деструкторе класса 
V
    Опции темы
nikitos1980
Дата 12.5.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



Возможно, банальный вопрос, но никак не могу найти ответ:
В объекте класса Вид храню указатель 

Код

CProduct* m_pParseProduct;


В конструкторе "обнуляю"

Код

m_pParseProduct = NULL;


В деструкторе уничножаю 

Код

if (m_pParseProduct)
       delete m_pParseProduct;


Почему если написать в деструкторе так

Код

if (m_pParseProduct)
    delete m_pParseProduct;
if (m_pParseProduct)
    delete m_pParseProduct;


то при закрытии окна компилятор выдаст ошибку, что вызывается второй delete m_pParseProduct, указывающий на "пустрое место". Вопрос глупый, но у меня в реальности этот указатель "указывает" на объект в списке CPtrList, а в деструкторе я уничтожаю этот список и компилятор ругается на вызов delete m_pParseProduct. 
Почему такое происходит?

Это сообщение отредактировал(а) nikitos1980 - 12.5.2009, 19:24
PM MAIL WWW   Вверх
Andrey44
Дата 13.5.2009, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Код

if (m_pParseProduct){
    delete m_pParseProduct;
    m_pParseProduct = NULL;
}
if (m_pParseProduct)
    delete m_pParseProduct;



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
nikitos1980
Дата 13.5.2009, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 17.5.2008

Репутация: нет
Всего: нет



Andrey44, я делал примерно так (примерно - потому что присваивал NULL удаляемым объектам списка) и все равно ругается компилятор.
PM MAIL WWW   Вверх
Lazin
Дата 13.5.2009, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



Цитата(nikitos1980 @  12.5.2009,  19:24 Найти цитируемый пост)
то при закрытии окна компилятор выдаст ошибку

причем здесь компилятор? это ошибка времени исполнения smile 
Цитата(nikitos1980 @  12.5.2009,  19:24 Найти цитируемый пост)
if (m_pParseProduct)
    delete m_pParseProduct;
if (m_pParseProduct)
    delete m_pParseProduct;

а второй вызов delete зачем? на случай, если не все удалилось? smile 
просто напиши в деструкторе delete m_pParseProduct; и все
а еще лучше использовать std::auto_ptr вместо указателя
PM MAIL Skype GTalk   Вверх
Alca
Дата 13.5.2009, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



Код

if (m_pParseProduct) {
    delete m_pParseProduct;    m_pParseProduct = NULL;
}



--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.