Delete (C++): различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
изыски компиляторов тут нипричем, все дело в стандартной операции "запятая" |
Нет описания правки |
||
Строка 33: | Строка 33: | ||
Вызов <code>delete[]</code> для массива объектов приведет к вызову деструктора для каждого объекта перед освобождением памяти, выделенной под массив. |
Вызов <code>delete[]</code> для массива объектов приведет к вызову деструктора для каждого объекта перед освобождением памяти, выделенной под массив. |
||
== Источники == |
|||
* {{публикация|книга |
|||
| автор = I. Horton, P. Van Weert |
|||
| часть = |
|||
| ссылка часть = |
|||
| заглавие = Beginning C++17: From Novice to Professional |
|||
| оригинал = |
|||
| ссылка = |
|||
| викитека = |
|||
| ответственный = |
|||
| издание = Fifth Edition |
|||
| место = |
|||
| издательство = Apress |
|||
| год = 2018 |
|||
| volume = |
|||
| pages = |
|||
| columns = |
|||
| allpages = |
|||
| серия = |
|||
| isbn = 978-1-4842-3366-5 |
|||
| doi = 10.1007/978-1-4842-3366-5 |
|||
| тираж = |
|||
| ref = Horton, Van Weert |
|||
}} |
|||
== См. также == |
== См. также == |
Версия от 10:19, 27 апреля 2019
delete
— ключевое слово языка программирования C++, которое было изначально введено в стандарт для осуществления освобождения памяти, выделенной оператором new
.
В языке программирования C++ оператор delete
возвращает память, выделенную оператором new
, обратно в кучу. Вызов delete
должен происходить для каждого вызова new
, чтобы избежать утечки памяти. После вызова delete
объект, указывающий на этот участок памяти, становится некорректным и не должен больше использоваться. Многие программисты присваивают 0 (нуль-указатель) указателям после использования delete
, чтобы минимизировать количество ошибок программирования. Удаление нуль-указателя фактически не имеет эффекта, так что нет необходимости проверять указатель на равенство 0 перед вызовом delete
(такая проверка входит в алгоритм оператора delete
).
Фрагмент кода в качестве примера:
int *p_var = nullptr; // объявление нового указателя
p_var = new int; // память динамически выделяется
/* .......
остальной код
........*/
delete p_var; // память освобождается
p_var = nullptr; // указатель заменяется на нуль-указатель
Массивы, созданные (выделенные) при помощи new []
, аналогичным образом могут быть уничтожены (освобождены) при помощи delete []
:
int size = 10;
int *p_var = nullptr; // объявление нового указателя
p_var = new int [size];// память динамически выделяется
/* .......
остальной код
........*/
delete [] p_var; // память освобождается
p_var = nullptr; // указатель заменяется на нуль-указатель
Вызов delete[]
для массива объектов приведет к вызову деструктора для каждого объекта перед освобождением памяти, выделенной под массив.
Источники
- I. Horton, P. Van Weert. Beginning C++17: From Novice to Professional. — Fifth Edition. — Apress, 2018. — ISBN 978-1-4842-3366-5. — doi:10.1007/978-1-4842-3366-5.
См. также
Ссылки
- Описание оператора delete в документации от IBM (англ.)
- Описание оператора delete применительно к Microsoft Visual Studio (англ.)
int main()
{
printf("Hi");
return 0;
}
| Это заготовка статьи о программировании. Помогите Википедии, дополнив её. |