> 백엔드 개발 > C++ > C에서 객체는 어떻게 파괴됩니까?

C에서 객체는 어떻게 파괴됩니까?

Barbara Streisand
풀어 주다: 2024-12-10 09:45:12
원래의
646명이 탐색했습니다.

How Are Objects Destroyed in C  ?

C에서 객체 소멸

범위가 지정된 객체

자동 객체: 포함하는 범위가 정의된 반대 순서로 소멸됩니다. 결론을 내립니다.
비로컬 정적 객체: 기본(전역 변수, 정적 멤버 데이터) 실행 후 정의의 역순으로 파괴됩니다.
로컬 정적 객체: 제어 흐름이 해당 정의를 처음 통과할 때 생성되고 파괴됩니다. main(함수 내 정적 변수) 실행 후 역순.

기본 클래스 및 멤버 하위 객체:**

정의의 역순으로 소멸됩니다. 먼저 멤버 하위 객체, 그 다음 기본 클래스 하위 객체입니다.

배열 요소:**

내림차순으로 소멸됩니다. n번째 요소 생성 중에 예외가 발생하면 n-1부터 0까지의 요소가 먼저 소멸됩니다.

임시 개체:**

클래스 유형의 prvalue 표현식이 평가될 때 생성됩니다. 포함하는 표현식이 평가를 완료하면 소멸됩니다. 평가 중에 예외가 발생하면 임시 개체가 올바르게 삭제됩니다.

동적 개체 및 배열:**

동적 개체: new Foo로 할당되고 delete p로 삭제됩니다. .
동적 배열: 새로운 Foo[n] 및 delete[] p로 삭제됨

두 경우 모두 메모리를 여러 번 삭제하려고 시도하거나, 삭제 후 액세스하거나, 잘못된 삭제 메커니즘(예: 단일 개체의 경우 delete[])을 사용하면 정의되지 않은 동작이 발생합니다. 생성 중에 예외가 발생하면 예외가 전파되기 전에 동적으로 할당된 메모리가 해제됩니다.

참조 계산 스마트 포인터:**

std::shared_ptr: 관리 객체를 마지막 std::shared_ptr 이를 참조하는 객체는 소멸됩니다.

예외 동작:

소멸자는 프로그램을 종료할 수 있으므로 예외를 발생시켜서는 안 됩니다. 객체 소멸 중에 예외가 발생하면 예외가 전파되고 이전에 소멸된 모든 하위 객체가 올바르게 소멸됩니다. 그러나 생성 중에 동적 객체의 예외가 발생하면 예외가 전파되기 전에 메모리가 해제되고 객체의 소멸자가 호출되지 않습니다.

위 내용은 C에서 객체는 어떻게 파괴됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿