Удаляет указатель так же, как освобождает указатель (который выделяет память)?
Что означает удаление указателя?
Ответ 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
.