구조체 멤버 포인터가 다른 포인터랑 같은 주소를 가리킬때 구조체가 소멸되면 어떻게 됨?
예를 들어 다음 처럼 됐을 때 mainPtr, mainPtr[5]에 할당된 영역도 없어짐??
struct A {
int *ptr;
}
int main() {
int *mainPtr = new int+;
A structA;
A structB;
structA = mainPtr;
structB = &mainPtr[5];
structA.~A();
structB.~A();
return 0;
}
구조체가 소멸 될때 포인터는 자동으로 해제되지 않는다고 함...
use after free
structA, structB가 소멸되면 structA.ptr, structB.ptr은 그대로 남아있다는 소리임?
객체 소멸 시 호출되는것은 자기 자신의 소멸자와 (객체인) 멤버 변수의 소멸자임 원시 데이터타입의 변수들은 객체가 아니니 호출할 소멸자가 없음 - dc App
추가로 상속관계가 있는 경우 파생(자식) 객체의 소멸자가 먼저 호출됨 소멸자의 주 목적은, 동적으로 할당된 메모리의 해제, 중요 정보 제거 등 데이터 관리 책임을 가진 객체가 어떤 행위를 보장함에 있음. 어떻게 보면 예외처리의 finally와 비슷한 속성을 가짐 - dc App