저는 C++의 RAII 숙어와 스마트 포인터를 사용하는 방법에 대해 배우고 있습니다.생성자가 예외를 throw 할 때 RAII는 어떻게 작동합니까?
제 독서에서, 저는 두 가지를 보았습니다. 그것은 저에게 서로 모순되는 것처럼 보입니다. http://www.hackcraft.net/raii/에서 인용
:
... RAII 의미와 부재 오브젝트가 작성되어 생성자 다음 소멸자가 풀림 스택의 일부로서 호출된다 완료되기 전에 예외가 발생 된 경우. 따라서 여러 리소스를 제어하는 객체가 멤버 RAII 객체를 사용하여 완전히 구성되지 않은 경우에도 해당 객체를 정리할 수 있습니다.
그러나 인용 http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.10에서 :
생성자가 예외를 throw했을 경우, 객체의 소멸자가 실행되지 않습니다. 개체가 이미 수행해야하는 작업 (예 : 메모리 할당, 파일 열기 또는 세마포 잠금)을 수행 한 경우이 "작업을 취소해야하는 작업"은 개체 내부의 데이터 멤버가 기억해야합니다.
그런 다음 두 번째 연결된 소스는 스마트 포인터를 사용하여 생성자에 이미 할당 된 항목의 문제를 처리 할 것을 권장합니다.
그래서 실제로 이러한 시나리오에서 어떻게됩니까?
+1 이것은 "newprogrammer [s]"*가 질문해야하는 방식입니다! –