Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Баловство со ссылками


Автор: ChipNDale 9.10.2010, 12:27
Приветствую.
Набросал такой код:
Код

int main() {
    int *p = new int(10);
    int &r = *p;
    delete p;
    return 0;
}


Если попытаться вывести r после delete, то получим ноль. Инкремент даст 1 - т.е. все как будто нормально.
Не совсем ясно: что вообще происходит, как эта фигня работает и на что ссылается r после вызова delete.

Автор: azesmcar 9.10.2010, 12:31
Цитата(ChipNDale @  9.10.2010,  12:27 Найти цитируемый пост)
Если попытаться вывести r после delete, то получим ноль. 

undefined behavior.

Цитата(ChipNDale @  9.10.2010,  12:27 Найти цитируемый пост)
Не совсем ясно: что вообще происходит, как эта фигня работает и на что ссылается r после вызова delete.

на ту же область памяти, на которую ссылалась до этого, просто она теперь непригодна для использования и всякая попытка доступа к ней приведет вас в волшебный мир неопределенного поведения.

Автор: bsa 9.10.2010, 23:01
ChipNDale, короче, никогда так не делай. Запомни одну вещь: после освобождения память становится тебе недоступной, и не пытайся читать/писать - сегодня может и работает, а завтра нет (это и есть - "неопределенное поведение").

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)