2012-05-13 5 views
12

delete ptr은 과 만 다르며, deleteptr 소멸자를 호출합니까? 또는 다른 말로하면 delete ptr은 할당 된 메모리를 해제하기 위해 ptr의 소멸자를 먼저 호출 한 다음 operator delete(ptr)을 호출합니까? 다음은 기술적으로 다음과 같은 delete ptr입니다.삭제 대 연산자 삭제 (및 무효 포인터)

T * ptr = new T; 

//delete ptr equivalent: 
ptr->~T(); 
::operator delete(static_cast<void *>(ptr)); 

?

+3

예, '연산자 삭제'를 오버로드 할 수 있다는 것 외에도 유일한 차이점이 있습니다. –

답변

8

delete ptroperator delete에 대한 오버로드 확인을 할 것입니다, 그래서 예, 글로벌 ::operator delete

하지만 그렇지 않으면 호출 할 수 있습니다. delete 연산자는 관련 소멸자 (있는 경우)를 호출 한 다음 operator delete을 호출합니다.