Подтвердить что ты не робот

Что означает удаление указателя?

Удаляет указатель так же, как освобождает указатель (который выделяет память)?

4b9b3361

Ответ 1

Удаление указателя (или удаление того, на что он указывает, альтернативно) означает

delete p;
delete[] p; // for arrays

p был назначен до этого утверждения, например

p = new type;

Он также может ссылаться на использование других способов управления динамической памятью, например free

free(p);

который ранее был назначен с помощью malloc или calloc

p = malloc(size);

Последнее чаще называют "освобождением", а первое чаще называют "удалением". delete используется для классов с деструктором, так как delete будет вызывать деструктор в дополнение к освобождению памяти. free (и malloc, calloc и т.д.) используется для базовых типов, но в С++ для них также могут использоваться новые и удаленные, поэтому нет смысла использовать malloc в С++, за исключением соображений совместимости.

Ответ 2

Вы не можете "удалить" указательную переменную

Конечно, вы можете: -)

int** p = new int*(new int(42));
delete *p;
delete p; // <--- deletes a pointer

Но серьезно, delete действительно следует называть delete_what_the_following_pointer_points_to.

Ответ 3

Да, delete используется для освобождения памяти и вызова деструктора для объекта.

Общепринятая настройка для указания указателя на NULL после удаления его, чтобы избежать недействительных указателей:

Object *o = new Object();

// use object
delete o; // call o->~Object(), then releases memory
o = NULL;

Когда new и delete используются со стандартными типами C в источнике С++, они ведут себя как malloc и free.

Ответ 4

Вы не можете "удалить" переменную указателя, установите только значение NULL (или 0).

Ответ 5

Да удаление указателя совпадает с удалением памяти или освобождением памяти и т.д.

Ответ 6

Да, и он вызывает соответствующий деструктор.

Ответ 7

Короче говоря, да.

Но вы должны быть осторожны: если вы выделяете p = new sometype(), тогда вы должны использовать delete p. Если вы используете p = sometype[count], используйте delete [] p

И еще одно: вы никогда не должны сочетать malloc/delete или new/free.