указатели — когда удалять / разыменовывать в переполнении стека

myObj* var = new myObj;
var = other1;

больше не нужно

delete var;
var = new myObj;
var = other2;

почему нельзя просто разыменовать вместо того, чтобы снова удалять и размещать?

var->other2;

0

Решение

Разыменование не означает удаление: http://en.wikipedia.org/wiki/Dereference

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

Не забудьте использовать Google.

2

Другие решения

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

Я настоятельно рекомендую вам прочитать вводный материал на C или C ++. Сеть полна до краев прекрасными лекциями и бесплатными электронными книгами. Вы не пожалеете об этом!

Google вокруг 🙂 и, возможно, вы вернетесь, чтобы ответить на свой вопрос через несколько дней.

Удачного кодирования!

0

Другие прокомментировали ваше замешательство по поводу терминологии. Я прокомментирую ваш код.

Когда вы делаете:

myObj* var = new myObj;
var = other1;

вы создаете утечка памяти. new myObj выделил память для структуры и установить var указать там. Когда вы затем переназначить varу вас больше нет переменной, указывающей на структуру, которая была выделена. C ++ не имеет автоматической сборки мусора, поэтому эта память больше недоступна, но у вас также нет переменной, с которой вы можете использовать delete чтобы вернуть его.

var = other1 переназначает указатель, он делает не скопировать содержимое; если вы хотите скопировать структуры, вы должны написать:

*var = *other1;

Когда вы тогда делаете:

delete var;

вы не удаляете исходную структуру, вы удаляете что угодно other указал на. Это действительно только если эта структура была создана с использованием new,

Вам определенно нужно вернуться и просмотреть весь свой учебный материал по указателям в C ++.

0
По вопросам рекламы [email protected]