delete 연산자 (C++)
메모리 블록을 할당 취소합니다.
구문
[
::
]delete
cast-expression
[::
]delete []
cast-expression
설명
캐스트 식 인수는 새 연산자를 사용하여 만든 개체에 대해 이전에 할당된 메모리 블록에 대한 포인터여야 합니다. delete
연산자에 형식 void
의 결과가 있으므로 값을 반환하지 않습니다. 예시:
CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;
할당 new
되지 않은 개체에 대한 포인터를 사용하면 delete
예측할 수 없는 결과를 얻을 수 있습니다. 그러나 값이 0인 포인터에서 사용할 delete
수 있습니다. 이 프로비전은 실패 시 0을 반환할 때 new
실패한 new
작업의 결과를 삭제하는 것은 무해하다는 것을 의미합니다. 자세한 내용은 새 연산자 및 삭제 연산자를 참조 하세요.
new
배열을 delete
비롯한 기본 제공 형식에도 연산자를 사용할 수 있습니다. 배열을 참조하는 경우 pointer
다음 앞에 pointer
빈 대괄호([]
)를 배치합니다.
int* set = new int[100];
//use set[]
delete [] set;
개체에서 delete
연산자를 사용하면 해당 메모리의 할당이 취소됩니다. 개체가 삭제된 후에 포인터를 역참조하는 프로그램에서는 예기치 않은 결과나 충돌이 발생할 수 있습니다.
C++ 클래스 개체에 대한 메모리 할당을 취소하는 데 사용되는 경우 delete
개체의 소멸자가 개체의 메모리 할당을 취소하기 전에 호출됩니다(개체에 소멸자가 있는 경우).
연산자에 대한 delete
피연산자가 수정 가능한 l-value이면 개체가 삭제된 후 해당 값이 정의되지 않습니다.
/sdl(추가 보안 검사 사용) 컴파일러 옵션을 지정하면 개체가 삭제된 후 연산자에 대한 피연산 delete
자가 잘못된 값으로 설정됩니다.
삭제 사용
delete 연산자에는 두 가지 구문 변형이 있습니다. 하나는 단일 개체이고 다른 하나는 개체 배열에 사용됩니다. 다음 코드 조각은 차이점을 보여줍니다.
// expre_Using_delete.cpp
struct UDType
{
};
int main()
{
// Allocate a user-defined object, UDObject, and an object
// of type double on the free store using the
// new operator.
UDType *UDObject = new UDType;
double *dObject = new double;
// Delete the two objects.
delete UDObject;
delete dObject;
// Allocate an array of user-defined objects on the
// free store using the new operator.
UDType (*UDArr)[7] = new UDType[5][7];
// Use the array syntax to delete the array of objects.
delete [] UDArr;
}
다음 두 가지 경우는 정의되지 않은 결과를 생성합니다. 즉, 개체에서 삭제(delete []
)의 배열 형식을 사용하고 배열에서 배열에 대해 배열이 아닌 형식의 삭제를 사용합니다.
예시
delete 작동 방식
delete 연산자는 함수 연산자 삭제를 호출합니다.
클래스 형식(클래스, 구조체 또는 공용 구조체)이 아닌 개체의 경우 전역 delete 연산자가 호출됩니다. 클래스 형식 개체의 경우 삭제 식이 단항 범위 확인 연산자(::
)로 시작하는 경우 할당 취소 함수의 이름이 전역 범위에서 확인됩니다. 그렇지 않으면 delete 연산자가 메모리 할당을 해제하기 전에 개체에 대한 소멸자를 호출합니다(포인터가 null이 아닌 경우). delete 연산자는 클래스별로 정의될 수 있습니다. 지정된 클래스에 이러한 정의가 없는 경우 전역 delete 연산자가 호출됩니다. 삭제 식을 사용하여 정적 형식이 가상 소멸자인 클래스 개체를 할당 해제하는 경우, 할당 해제 함수는 개체의 동적 형식에 대한 가상 소멸자를 통해 확인됩니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기