C에서의 객체 파괴
객체 파괴: 무엇을, 언제, 어떻게
In C에서 객체는 범위가 지정된 객체로 광범위하게 분류될 수 있으며 동적 개체. 범위가 지정된 객체는 둘러싸는 범위(예: 지역 변수, 전역 변수, 클래스 인스턴스)에 연결된 수명을 갖는 반면, 동적 객체는 포인터(예: new, delete)를 사용하여 생성 및 삭제됩니다.
범위가 지정된 객체 개체
-
자동 개체: 제어 흐름이 범위를 벗어날 때(예: 함수 종료, 블록 끝) 생성의 역순으로 삭제됩니다.
-
비로컬 정적 개체: 메인 이후 생성의 역순으로 삭제됩니다. () 실행.
-
로컬 정적 개체: 제어 흐름이 진입할 때 구성됩니다. 해당 정의가 처음으로 삭제되고 main() 실행 후 역순으로 삭제됩니다.
-
기본 클래스 및 멤버 하위 객체: 객체의 소멸자 내에서 역순으로 삭제되고 그 뒤에 기본 클래스 하위 객체가 삭제됩니다. .
-
배열 요소: 내림차순으로 파괴됨 order.
-
임시 개체: prvalue 식에서 생성되고 전체 식을 평가할 때 삭제됩니다.
동적 개체
- 동적 개체(신규) Foo): delete p를 명시적으로 호출하면 삭제됩니다.
- 동적 배열(new Foo[n]): delete[] p를 명시적으로 호출하면 삭제됩니다.
예외 처리
- 예외는 스택을 통해 다시 전파되어 이전에 생성된 자동 객체에 대해 소멸자를 호출합니다.
소멸자는 예외를 발생시키지 않아야 합니다.- 예외가 발생하는 경우 객체 생성 중에 발생하면 예외가 발생하기 전에 기본 메모리가 해제됩니다. throw됩니다.
-
수동 개체 삭제
C에는 가비지 수집기가 없기 때문에 리소스 누출을 방지하려면 동적 개체를 수동으로 해제해야 합니다.
스마트 포인터
- 참조 계산 스마트 포인터(std::shared_ptr): 참조하는 마지막 std::shared_ptr이 파기되면 기본 개체를 자동으로 파기합니다.
위 내용은 C에서 객체 파괴는 어떻게 작동하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!