로컬 정적 객체의 생성자에서 throw 된 예외를 어떻게 사용해야합니까? 내가 알고있는 것처럼, 두 번째 foo
메소드를 호출의 경우, a
만큼 완벽하게 구성 객체를 처리하고, 생성자가 호출되지 객체로컬 정적 객체 및 예외
class A
{
public:
A() {throw runtime_error("Ooops");}
};
void foo()
{
static A a = A();
cout << "Continue" << endl;
}
int main(void)
{
try
{
foo();
}
catch(...)
{
}
foo(); // Prints continue
return 0;
}
예를 들어 나는 다음 코드했다. (더 이상, 그것은 소멸자 a
첫 번째 예외 던지기로 인해 호출되지 않습니다)
아니요, 이해가 잘못되었습니다. 당신은 스스로 (trivially) 이것을 시도 할 수있었습니다 (https://wandbox.org/permlink/0zqV3BglWpVZSgRM). –
예외를 던지고 생성자의 실행을 종료 한 경우 (객체 생성을 완료하지 않은 경우)'a '가 완전히 생성되는 것을 어떻게 예상합니까? – Rogus
'정적 A a = A();'왜 이것을 했습니까? 복사 초기화가 필요한 이유는 무엇입니까? –