NULL указатель

« картинки и свежие анекдоты | чат

NULL указатель

Заметил особенность, которую раньше не замечал.

class A {};

int main() {
A *a;

a = new A;
delete a;

if (!a) {
// Вот сюда при вышеуказанных условия не попадём
}

a = NULL;

if (!a) {
// а теперь попадём
}

}


Т.е. обычное логическое сравнение не проходит, если указателю явно не присвоено NULL. Проверил и в MSVS и в gcc.
А почему так?
Мне почему то всегда казалось, что если по ссылке нет объекта, то if (!a) должно меня пускать в условие.

13.04.11 18:22: Перенесено из 'C/C++'

Комментарии:

Dmitry

А что не так? О каких логических сравнениях идет речь в C++? Ты создал объект, и положил его адрес в указатель a. Потом удалил объект, но переменная не обнулилась. При проверке if (!a) значение указателя a > 0 (там по прежнему адрес уже удаленного объекта, он не равен нулю), следовательно логическая операция ! вернет 0 и условие не выполнится. Присвоил указателю NULL - инверсия вернет 1 (true) и условие выполнится

Комментарий:

Ваше имя:

Ещё интересное на этом сайте:

А как ты открываешь пакетик с сахаром?
Мастер парковки
Девушка дня
Анекдоты и картинки #8603250
#5955: Нетбук & Ко
#5954: Из проводов и пыли
Мочалка
Золотые руки могут расти - откуда угодно.
Инновации
Лобовое на глазах у ДПС.
Бюро находок
Девушки, учитесь!
Из ЖЖ Михаила Задорнова
Совершенно чрезвычайная ситуация
Собираем команду для стартапа
Визуализация сортировки в танце
Жетон
Помочь Валере 2!
Блогер требует 100 тысяч за отмаз от армии
Притырил
« все анекдоты и картинки
Рейтинг@Mail.ru