| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Уничтожение объекта |
| Автор: decembrist 8.12.2004, 15:55 | ||||
У меня есть класс, c кот. я работаю при помощи указателя.
Произвожу вычисления с полями и т.п. Как мне сделать так, чтоб корректно работал код:
То есть, если некоторое поле объекта удовлетворяет условию, пользуясь функцией класса нарисовать объект класса, если нет разрушить объект. Причем это крутится в цикле и pa->pole1 все время пересчитывается? |
| Автор: _hunter 8.12.2004, 16:30 |
| так и делай ( предварительно проверив валидность указателя ) в чем проблема? |
| Автор: DENNN 8.12.2004, 17:25 | ||
Если выполнил delete для объекта, то присвой указателю значение 0 - это будет признаком того, что этот указатель более на объект не указывает.
Я так понял, проблема в том, что удалив объект, ты в следующем цикле на него ссылаешься? |
| Автор: Hroft 9.12.2004, 09:58 | ||
? |
| Автор: decembrist 9.12.2004, 11:17 | ||
Да, проблема в этом. Сейчас попробую проверить версию Hroft |
| Автор: decembrist 9.12.2004, 11:54 | ||||
Вот. Подправил код:
и все равно вылетает. Потому, что после уничтожения объекта, цикл возвращается на строку
а значение pa->pole1= - 1.58839967Е+38 и снова пытается выполнить функцию pa->Draw(); ну и соответственно вылетает. Как этого всего избежать? |
| Автор: DENNN 9.12.2004, 13:31 | ||||
Ничего подобного. На следующей итерации код попадает на строку
Запусти дебаггер и проверь в пошаговом режиме. Глядя на возникший вопрос у меня возникают сомнения, что указатель указывает "в никуда" еще до этого участка кода. Самый первый вызов Draw у тебя действительно работает? |
| Автор: decembrist 9.12.2004, 13:48 | ||||
Под дебаггером и работаю.Так вот, после удаления объекта, компилятор игнорирует обнуление указателя.Т.е. строчку pa = NULL; И код
выполняется и идет проверка
А вызовы pa->Draw (); и другие функции класса у меня работают. |
| Автор: srd 9.12.2004, 13:52 | ||||
Замени
на
Кстати, в Си++ использование NULL вместо 0 особого смысла не имеет. |
| Автор: decembrist 10.12.2004, 13:07 |
| Спасибо srd |