Я пытаюсь разобраться с управлением памятью в C ++, поэтому я пишу карточную игру (в которой есть список карточек), но без использования vector
.
. скажем, у меня есть массив Card
s, как это: Card** cards
. Теперь я хочу заменить карту с именем Card* remove
на другую карту.
Я считаю, что все мои Card*
в cards
необходимо создать с помощью new
,потому что другие функции должны обращаться к ним по указателю. Поэтому, когда я удаляю элемент из cards
, мне также нужно delete
.
Однако, когда я вызываю delete remove
, он, кажется, портит мой массив. В частности, предположим, что remove
произошло с индексом 2. Очевидно, до delete
, cards[2] == remove
. Однако после delete
изменились и cards[2]
, и remove
, тогда как указатель на cards
одинаков.
Это может быть не плохо, но я очень запуталсяотносительно того, почему это происходит. В идеале я мог бы удалить память в куче, расположенной в remove
, без изменения cards
. Чего мне не хватает?