throw-expressions 및 복사 생성자에 대한 질문이 있습니다. C에서복사 생성자 및 throw 표현
#include <iostream>
class Foo
{
public:
Foo() { std::cout << "Foo::Foo() \n"; }
Foo(const Foo&) { std::cout << "Foo::Foo(const Foo&) \n"; }
~Foo() { std::cout << "Foo::~Foo() \n"; }
};
int main()
{
try
{
throw Foo();
}
catch (...)
{
std::cerr << "Error \n";
}
}
++ 98/C++ 03, 수행이 코드 인쇄 :
Foo::Foo()
Error
Foo::Foo(const Foo&)
Foo::~Foo()
다음의 C++ 11 일에 :
Foo::Foo()
Error
Foo::Foo(const Foo&)
Foo::~Foo()
또는
Foo::Foo()
Error
Foo::~Foo()
이 내용은 C++에서만 나타납니다. 11 :
12.8 복사 및 이동 클래스 오브젝트 [class.copy]
31 ... - 피연산자 함수 이외 비 휘발성 자동 오브젝트의 이름 (인 스로인 식의 또는 catch 절 매개 변수)의 범위가 try-block (있는 경우)의 가장 안쪽에있는 끝을 넘어서지 않으면 피연산자에서 예외 객체 (15.1)로 복사/이동 작업을 생략 할 수 있습니다. 자동 개체를 예외 개체에 직접 생성
나는 그 중 어느 것도 마지막을 제외하고, 바로 없다 생각합니다. 'Error'라는 단어는 모든 생성자 다음에 _ 항상 _ 발생합니다. 그 부분이 오타이거나 대답의 일부인지 나는 모른다. 정확히 무엇을 요구하고 있습니까? –
또한 문제가 발생한 주문의 원인이 아닌지 확인하기 위해 모든 스트림을 동일한 스트림에 출력 할 수 있습니다. –
일부 불량 컴파일러는'throw;'의 경우'catch (...)'에 예외 객체를 복사합니까? – PiotrNycz