자동 객체: 포함하는 범위가 정의된 반대 순서로 소멸됩니다. 결론을 내립니다.
비로컬 정적 객체: 기본(전역 변수, 정적 멤버 데이터) 실행 후 정의의 역순으로 파괴됩니다.
로컬 정적 객체: 제어 흐름이 해당 정의를 처음 통과할 때 생성되고 파괴됩니다. main(함수 내 정적 변수) 실행 후 역순.
정의의 역순으로 소멸됩니다. 먼저 멤버 하위 객체, 그 다음 기본 클래스 하위 객체입니다.
내림차순으로 소멸됩니다. n번째 요소 생성 중에 예외가 발생하면 n-1부터 0까지의 요소가 먼저 소멸됩니다.
클래스 유형의 prvalue 표현식이 평가될 때 생성됩니다. 포함하는 표현식이 평가를 완료하면 소멸됩니다. 평가 중에 예외가 발생하면 임시 개체가 올바르게 삭제됩니다.
동적 개체: new Foo로 할당되고 delete p로 삭제됩니다. .
동적 배열: 새로운 Foo[n] 및 delete[] p로 삭제됨
두 경우 모두 메모리를 여러 번 삭제하려고 시도하거나, 삭제 후 액세스하거나, 잘못된 삭제 메커니즘(예: 단일 개체의 경우 delete[])을 사용하면 정의되지 않은 동작이 발생합니다. 생성 중에 예외가 발생하면 예외가 전파되기 전에 동적으로 할당된 메모리가 해제됩니다.
std::shared_ptr
예외 동작:
소멸자는 프로그램을 종료할 수 있으므로 예외를 발생시켜서는 안 됩니다. 객체 소멸 중에 예외가 발생하면 예외가 전파되고 이전에 소멸된 모든 하위 객체가 올바르게 소멸됩니다. 그러나 생성 중에 동적 객체의 예외가 발생하면 예외가 전파되기 전에 메모리가 해제되고 객체의 소멸자가 호출되지 않습니다.
위 내용은 C에서 객체는 어떻게 파괴됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!