logo

видалити ключове слово в C++

видалити - це оператор до якого звикли знищити масив і не масив (вказівник) об'єктів які динамічно створюються новий оператор.

    delete можна використовувати або за допомогою оператор видалення або видалити оператор [ ].
  • The новий Оператор використовується для динамічного розподілу пам'яті, яка зберігає змінні в пам'яті купи.
  • Це означає, що оператор видалення звільняє пам’ять від купа .
  • Вказівник на об’єкт не знищується, значення або блок пам’яті, на який вказує вказівник, знищується.
  • Оператор видалення має недійсний тип повернення, що означає, що він не повертає жодного значення.

Нижче наведено кілька прикладів того, де ми можемо застосувати оператор видалення:



1. Видалення об’єктів масиву

Ми видаляємо масив за допомогою [] дужок.

C++








// Program to illustrate deletion of array> #include> using> namespace> std;> int> main()> {> >// Allocate Heap memory> >int>* array =>new> int>[10];> >// Deallocate Heap memory> >delete>[] array;> >return> 0;> }>

>

>

2. Видалення NULL покажчика

Видалення NULL не викликає жодних змін і не викликає помилок.

C++




// C++ program for deleting> // NULLL pointer> #include> using> namespace> std;> int> main()> {> >// ptr is NULL pointer> >int>* ptr = NULL;> >// deleting ptr> >delete> ptr;> >return> 0;> }>

>

>

3. Видалення вказівника зі значенням або без нього

Пам’ять, на яку вказує вказаний покажчик, буде звільнено з пам’яті купи.

C++

помилка: не вдалося знайти або завантажити основний клас




// C++ program for deleting pointer with or without value> #include> using> namespace> std;> int> main()> {> >// Creating int pointer> >int>* ptr1 =>new> int>;> >// Initializing pointer with value 20> >int>* ptr2 =>new> int>(20);> >cout <<>'Value of ptr1 = '> << *ptr1 <<>' '>;> >cout <<>'Value of ptr2 = '> << *ptr2 <<>' '>;> >// Destroying ptr1> >delete> ptr1;> >// Destroying ptr2> >delete> ptr2;> >return> 0;> }>

>

>

Вихід

Value of ptr1 = 0 Value of ptr2 = 20>

4. Видалення покажчика Void

Оператор видалення не тільки звільняє пам'ять, але також викликає деструктор об'єкта, який потрібно видалити. Ось чому, якщо ми використовуємо покажчик void із видаленням, це призведе до невизначеної поведінки.

C++




// C++ prgram for deleting a void pointer> #include> using> namespace> std;> int> main()> {> >// Creating void pointer> >void>* ptr;> >// Destroying void pointer> >delete> ptr;> >cout <<>'ptr deleted successfully'>;> >return> 0;> }>

>

>

Вихід

ptr deleted successfully>

5. Видалення пам’яті, динамічно виділеної malloc()

Вивільнення пам’яті, виділеної malloc() за допомогою оператора delete, також призводить до невизначеної поведінки. Рекомендується використовувати delete для new і free() для malloc.

C++




// C++ program for deleting memory dynamically allocated by> // malloc> #include> using> namespace> std;> int> main()> {> >// Dynamic memory allocated by using malloc> >int>* ptr2 = (>int>*)>malloc>(>sizeof>(>int>));> >delete> ptr2;> >cout <<>'ptr2 deleted successfully'>;> >return> 0;> }>

>

>

Вихід

як перетворити str на int
ptr2 deleted successfully>

Примітка : хоча наведена вище програма добре працює на GCC. Не рекомендується використовувати delete з malloc().

6. Видалення змінних типів даних, визначених користувачем

C++




// C++ program for deleting variables of User Defined data> // types> #include> using> namespace> std;> struct> P {> >// Overloading delete operator for single object> >// deallocation> >static> void> operator>delete>(>void>* ptr,>size_t> sz)> >{> >cout <<>'custom delete for size '> << sz << endl;> >// ::operator delete(ptr) can also be used> >::operator>delete>(ptr);> >}> >// Overloading delete operator for array deallocation> >static> void> operator>delete>[](>void>* ptr,>size_t> sz)> >{> >cout <<>'custom delete for size '> << sz << endl;> >// ::operator delete(ptr) can also be used> >::operator>delete>(ptr);> >}> };> int> main()> {> >P* var1 =>new> P;> >delete> var1;> >P* var2 =>new> P[10];> >delete>[] var2;> }>

>

>

Вихід

custom delete for size 1 custom delete for size 18>

Винятки

1. Спроба видалити невказівний об’єкт

C++




// C++ program for trying to delete a Non-pointer object> #include> using> namespace> std;> int> main()> {> >int> x;> >// Delete operator always> >// requires pointer as input> >delete> x;> >return> 0;> }>

>

>

Вихід

анотації у Spring Boot
error: type ‘int’ argument given to ‘delete’, expected pointer>

2. Спроба видалити вказівник на змінну, виділену локальним стеком

C++




// C++ program for trying to delete the pointer to a local> // stack-allocated variable> #include> using> namespace> std;> int> main()> {> >int> x;> >int>* ptr1 = &x;> >// x is present on stack frame as> >// local variable, only dynamically> >// allocated variables can be destroyed> >// using delete operator> >delete> ptr1;> >return> 0;> }>

>

>

Вихід

main.cpp: In function ‘int main()’: main.cpp:16:12: warning: ‘void operator delete(void*, std::size_t)’ called on unallocated object ‘x’ [-Wfree-nonheap-object] 16 | delete ptr1; | ^~~~ main.cpp:9:9: note: declared here 9 | int x; | ^ free(): invalid pointer>

Схожі статті

  • нове ключове слово
  • C++ malloc()