delete 연산자 (C++)

메모리 블록을 할당 취소합니다.

구문

[::] deletecast-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 연산자가 호출됩니다. 클래스 형식 개체의 경우 삭제 식이 단항 범위 확인 연산자(::)로 시작하는 경우 할당 취소 함수의 이름이 전역 범위에서 확인됩니다. 그렇지 않으면 delete 연산자가 메모리 할당을 해제하기 전에 개체에 대한 소멸자를 호출합니다(포인터가 null이 아닌 경우). delete 연산자는 클래스별로 정의될 수 있습니다. 지정된 클래스에 이러한 정의가 없는 경우 전역 delete 연산자가 호출됩니다. 삭제 식을 사용하여 정적 형식이 가상 소멸자인 클래스 개체를 할당 해제하는 경우, 할당 해제 함수는 개체의 동적 형식에 대한 가상 소멸자를 통해 확인됩니다.

참고 항목

단항 연산자가 있는 식
키워드
new 및 delete 연산자