Новое и Удалить с помощью указателей - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь понять, действительно ли следующий код удаляет объект из памяти

Во время delete z что на самом деле удаляется?Удаляется ли динамически созданное целое число x?Удаляются ли y и z также?

Я запустил программу и при выводе xy и z

#include <iostream>

using namespace std;

int main()
{

int* x = new int;

*x=1;

int* y = x;
int* z = y;

delete z;

return 0;
}

выводятся различные значения. Я предполагаю, что переменная x больше не являетсяв куче?

1 Ответ

1 голос
/ 28 апреля 2019

Ценности - дома, построенные на участках на улице.

Указатели - это уличные адреса (на лоты), написанные на листе бумаги. Иногда эти кусочки бумаги тоже на лотах.

new int отправляется в среду выполнения и просит его найти где-то новый лот, подразделить его на новое свойство, распределить по зонам для развития, затем построить на нем дом int, а затем вернуть адрес нового лота. .

Копирование int* вокруг только копий вокруг листа бумаги с этим адресом на нем. Запись его (наличие переменной x с адресом в ней выходит из области видимости) не влияет на фактический «лот» или int, построенный на нем.

Позвонив по номеру delete и передав ему уличный адрес, просит среду выполнения перейти к этому журналу, уничтожить там int, а затем дезонизировать / разделить его для разработки. Указатель на int исчез, но все остальные копии адреса указателя остаются. Это просто опасная ерунда, и если вы попытаетесь перейти по этому адресу, вы можете оказаться где угодно - в другом несвязанном int доме, на парковке торгового центра с момента его постройки, в усыпанном мусором месте сноса, или в реакторе ядерной установки, построенной в этом месте после того, как вы дезонировали его (и ваша попытка написать 7 привела к тому, что он растаял).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...