메모리 블록을 할당 취소합니다.
구문
[
::
]delete
cast-expression
[::
]delete []
cast-expression
설명
cast-expression 인수는 new 연산자를 사용하여 만든 개체에 이전에 할당된 메모리 블록에 대한 포인터여야 합니다. delete
연산자는 void
형식의 결과를 가지므로 값을 반환하지 않습니다. 예시:
CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;
new
로 할당되지 않은 개체에 대한 포인터에 delete
를 사용하면 예측할 수 없는 결과가 발생합니다. 그러나 값이 0인 포인터에는 delete
를 사용할 수 있습니다. 이 프로비전은 실패 시 new
가 0을 반환할 때 실패한 new
작업의 결과를 삭제해도 해가 없음을 의미합니다. 자세한 내용은 new 및 delete 연산자를 참조하세요.
new
및 delete
연산자는 배열을 포함한 기본 제공 형식에도 사용할 수 있습니다. pointer
가 배열을 가리키는 경우 pointer
앞에 빈 대괄호([]
)를 넣습니다.
int* set = new int[100];
//use set[]
delete [] set;
개체에 delete
연산자를 사용하면 메모리 할당이 해제됩니다. 개체가 삭제된 후에 포인터를 역참조하는 프로그램에서는 예기치 않은 결과나 충돌이 발생할 수 있습니다.
delete
를 사용하여 C++ 클래스 개체에 대한 메모리 할당을 취소하는 경우 개체의 메모리 할당이 취소되기 전에 개체의 소멸자가 호출됩니다(개체에 소멸자가 있는 경우).
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
사용 예는 new 연산자를 참조하세요.
delete 작동 방식
delete 연산자는 operator delete 함수를 호출합니다.
클래스 형식이 아닌 개체의 경우(class, struct 또는 union), 전역 delete 연산자가 호출됩니다. 클래스 형식 개체의 경우에는 삭제 식이 단항 범위 확인 연산자(::
)로 시작되면 할당 해제 함수의 이름이 전역 범위에서 확인됩니다. 그렇지 않으면 delete 연산자가 메모리 할당을 해제하기 전에 개체에 대한 소멸자를 호출합니다(포인터가 null이 아닌 경우). delete 연산자는 클래스별로 정의될 수 있습니다. 지정된 클래스에 이러한 정의가 없는 경우 전역 delete 연산자가 호출됩니다. 삭제 식을 사용하여 정적 형식이 가상 소멸자인 클래스 개체를 할당 해제하는 경우, 할당 해제 함수는 개체의 동적 형식에 대한 가상 소멸자를 통해 확인됩니다.