Удаление указателей. С++

118
20 августа 2019, 08:30
int main()
{
  int *ptr = new int(5);
  delete ptr;
  // ptr становится висячим указателем.
  std::cout << sizeof(ptr);
  // у меня выводит 4 байта.
  //
  ... какие-то действия в коде
  //
}

я обьявляю указатель, который занимает 4 байта у меня в памяти, удаляю его где нибудь в начале тела ( насколько я знаю, delete всего лишь освобождает память, в которой находился указатель ), что происходит с самим указателем ? Почему он до сих пор занимает какую-то память? Это же ведь может влиять на скорость моей программы если я создам сотню указателей, удалю их, а они все равно будут занимать какое - то место.

Answer 1

Вы неправы.

delete ptr;

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

sizeof(ptr) говорит только о том, сколько места в памяти занимает переменная, и никак не зависит от ее значения.

На скорость программы даже сотня указателей как-то вряд ли повлияет, а вот выделение/освобождение через new/delete - может. Именно сам достаточно длительный с точки зрения процессорного времени процесс выделения и освобождения.

READ ALSO
Минимальный размер QWidget с учетом содержимого

Минимальный размер QWidget с учетом содержимого

Мне необходимо чтобы виджет занимал минимально возможное пространство, но с учетом того, что он не может быть меньше, чем его содержимоеЕго...

96
Как устроен массива типа char?

Как устроен массива типа char?

Когда я создаю char name[] = "John" и пытаюсь разыменовать *name то получаю JЭто значит name сам по себе это адрес? Если да, то адрес чего? Насколько я знаю,...

138
Производительность команд &lt; и &lt;=

Производительность команд < и <=

Давно мучаюсь вопросом есть ли различия между командами меньше и меньше или равно на низком уровне в плане количества команд и производительности?

83
В чем разница типов BOOL и bool?

В чем разница типов BOOL и bool?

В чём разница типов BOOL и bool?

98