삭제는 운영자 그것은 익숙하다 어레이 파괴 그리고 비배열 (바늘) 사물 동적으로 생성된 새로운 운영자.
- 삭제는 다음 중 하나를 사용하여 사용할 수 있습니다. 삭제 연산자 또는 [ ] 연산자를 삭제합니다.
- 그만큼 새로운 연산자는 힙 메모리에 변수를 저장하는 동적 메모리 할당에 사용됩니다.
- 이는 삭제 연산자가 메모리 할당을 해제한다는 의미입니다. 더미 .
- 객체에 대한 포인터는 소멸되지 않으며, 포인터가 가리키는 값이나 메모리 블록은 소멸됩니다.
- 삭제 연산자는 무효의 반환형은 어떤 값도 반환하지 않는다는 의미입니다.
다음은 삭제 연산자를 적용할 수 있는 몇 가지 예입니다.
1. 배열 객체 삭제
[] 괄호를 사용하여 배열을 삭제합니다.
C++
자바에서 문자열을 int로 변환
// 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. 보이드 포인터 삭제
delete 연산자는 메모리 할당을 해제할 뿐만 아니라 삭제할 객체의 소멸자를 호출하기도 합니다. 그렇기 때문에 삭제와 함께 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()에 의해 동적으로 할당된 메모리 삭제
delete 연산자를 사용하여 malloc()에 의해 할당된 메모리 할당을 해제하면 정의되지 않은 동작이 발생합니다. new에는 delete를, malloc에는 free()를 사용하는 것이 좋습니다.
C++
지도 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;> }> |
일반 보호 결함
>
>산출
ptr2 deleted successfully>
메모 : 위 프로그램은 GCC에서 잘 실행되지만. 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++
int를 문자열로 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;> }> |
>
>
산출
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++ 말록()