> 백엔드 개발 > C++ > 본문

생성자에서 예외가 발생해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-10 07:36:02
원래의
723명이 탐색했습니다.

Should Exceptions Be Thrown from Constructors?

생성자에서 예외 발생: 디자인 고려 사항

소프트웨어 개발 영역에서는 생성자에서 예외를 발생시키는 것이 적절한지에 대한 논쟁이 계속되고 있습니다. 이 질문은 프로그래밍 애호가들 사이에서 토론을 촉발시켰고, 최근 동료의 질문을 통해 우리는 이 주제에 대해 자세히 알아보게 되었습니다.

디자인 관점에서 생성자에서 예외를 throw하는 것이 허용됩니까?

예제에 설명된 것처럼 클래스가 POSIX 뮤텍스를 캡슐화하는 시나리오를 생각해 보세요. 아래:

class Mutex {
public:
  Mutex() {
    if (pthread_mutex_init(&mutex_, 0) != 0) {
      throw MutexInitException();
    }
  }
};
로그인 후 복사

이 경우 pthread_mutex_init 호출이 실패하면 뮤텍스 개체를 사용할 수 없게 됩니다. 예외를 발생시키면 객체가 일관되지 않은 상태로 생성되지 않도록 하여 향후 발생할 수 있는 오류를 예방할 수 있습니다.

표준 실습과 멤버 함수 접근 방식

이론이 있을 수도 있습니다. 예외를 발생시키는 대신 클래스는 pthread_mutex_init 호출의 결과를 기반으로 부울을 반환하는 초기화용 멤버 함수를 가질 수 있습니다. 이 접근 방식에는 장점이 있지만 미묘한 문제가 발생합니다. 이는 모든 사용자가 초기화 기능 호출을 기억해야 하는데, 이는 간과되어 정의되지 않은 동작으로 이어질 수 있습니다. RAII 원칙(리소스 획득은 초기화)에서 벗어나면 객체의 의도된 디자인이 손상될 수 있습니다.

결론

두 접근 방식 모두 장점이 있지만 생성자에서 예외를 발생시키는 것은 표준으로 등장했습니다. 조기에 실패함으로써 불완전하거나 일관성 없는 객체가 생성되는 것을 방지하고 추가 작업이 수행되기 전에 객체의 상태가 유효한지 확인합니다.

위 내용은 생성자에서 예외가 발생해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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