ProgramingTip

어떤 소멸자가 실행되고

bestdevel 2020. 10. 27. 23:00
반응형

어떤 소멸자가 실행되고


C ++에서 생성자가 예외를 던지면 어떤 소멸자가 실행되고?

예외 초기화 목록이나 본문에서 예외가 발생하면 차이가 있습니까?

또한 상속과 회원은 어떻습니까? 아마도 완성 된 모든 구조물이 파괴 될 것입니다. 일부 멤버 만 구성하면 해당 멤버 만 파괴 검증? 여러 상속이있는 경우 모든 상품을 제거합니까? 가상 상속이 변경되는 사항이 있습니까?


어떤 소멸자가 실행되고

해당 범위에서 완전히 생성 된 모든 개체의 소멸자.

예외가 초기화 목록 또는 본문 중이면 차이가 있습니까?

모든 개체는 파괴됩니다.
생성되지 않았거나 발생하지 않을 경우 발생하지 않습니다.

상속과 회원은 어떻습니까? 아마도 완성 된 모든 구조물이 파괴 될 것입니다. 일부 멤버 만 구성하면 해당 멤버 만 파괴 검증? 여러 상속이있는 경우 모든 상품을 제거합니까? 가상 상속이 변경되는 사항이 있습니까?

모든 구조물은 파괴됩니다. 예, 완전히 생성 된 객체 만 파괴됩니다.

좋은 읽기 :

Herb Sutter의 생성자 실패

특히 그가 설명하는 부분을 좋아하십시오.

생물학적에서 개념이 발생했습니다. 생성자가 시작하는 최선의 노력에도 불구하고 유산이 뒤따 랐음에도 불구하고 생성자는 용어 (인식)에 도달하지 않습니다.

부수적으로 생산자가 성공하지 않습니다. 파괴 할 것이 없습니다. "이것은 죽을 수 없습니다." 이것은 "생성되는 예외를 던진 객체" 라는 구절을 실제로 모순으로 만듭니다. 그런 것은 전 대상보다 훨씬 적습니다 ... 그것은 살았던 적이 없었고, 처음으로 숨을 쉬지 않았습니다.


C ++에서 생성자가 예외를 던지면 어떤 소멸자가 실행되고?

생성자가있는 모든 개체가 완료 될 때까지 실행됩니다.

예외 초기화 목록이나 본문에서 예외가 발생하면 차이가 있습니까?

아니요. 예외적으로 처리 된 모든 구성원은 소멸 처리됩니다. 구성 중에 던진 구성원과 다른 구성 구성원은 소멸자가 실행되지 않습니다 . 멤버 생성의 순서는 잘 정의되어 있으므로 예외 발생 지점을 알고 있으면 어떤 일이 보관 지 정확히 알 수 있습니다.

또한 상속과 회원은 어떻습니까?

동일한 규칙이 적용됩니다.

아마도 완성 된 모든 구조물이 파괴 될 것입니다.

일부 멤버 만 구성하면 해당 멤버 만 파괴 검증?

여러 상속이있는 경우 모든 상품을 제거합니까?

가상 상속이 변경되는 사항이 있습니까?

아니요.
그러나 참고 : 가상 상속은 생성자가 호출되는 순서에 영향을줍니다. 순서가 정의 된 방법에 익숙하지 않은 경우에도 정확한 규칙을 사용하지 않을 수 있습니다.


생성자로 인해 남아있는 로컬 범위에서 생성 된 모든 개체는 소멸됩니다. 작동 처리는 사용할 때까지 소멸 호출하여 스택을 백업합니다.

생성자에서 예외가 발생하면 모든 하위 개체의 소멸 호출이 발생합니다. 생성자가 또한 new표현식의 일부인 경우 적절한 배치 삭제 연산자가 있으면 호출됩니다.

참고 URL : https://stackoverflow.com/questions/10212842/what-destructors-are-run-when-the-constructor-throws-an-exception

반응형