초기화 목록에서 예외를 잡는 방법에 대한 질문이 있습니다.초기화 목록에서 예외를 잡는 방법?
예를 들어, 우리는 내가이 개체를 만드는 절차에 의해 잡힐 것으로 판단 바
class Foo {
public:
Foo(int i) {throw 0; }
}
class Bar : public Foo{
public:
Bar() : Foo(1) {}
}
초기화 목록에서 예외를 잡는 방법에 대한 질문이 있습니다.초기화 목록에서 예외를 잡는 방법?
예를 들어, 우리는 내가이 개체를 만드는 절차에 의해 잡힐 것으로 판단 바
class Foo {
public:
Foo(int i) {throw 0; }
}
class Bar : public Foo{
public:
Bar() : Foo(1) {}
}
나는 (당신이 그것을 잡은 후에는 어떻게 할 건데 무엇 호출자에 그런 일을 잡기 위해 더 나은 비록. 그리고?) 구문이 this처럼 생각
Bar::Bar()
try
: Foo(1)
{
}
catch(const SomeException &e)
{
}
에서 파생 된 클래스의 푸 있습니다.
C++이 수행하는 메커니즘을 가지고 그래서, 거의 사용되지 않습니다.
Bar::Bar()
try
: Foo(1)
{
}
catch(Something)
{
}
유일한 예외를 변환하는 데 사용되어야하는 이유 설명이 고전 gotw을, (예를 들어, 예외 유형의 FooException이 BarException된다) 참조 :이 기능 try 블록이다.
항상 참조를 잡으십시오. – Potatoswatter
문제가있는 인스턴스를 boost::optional
으로 바꾸는 것을 고려하십시오. 그런 다음 초기화를 생성자 본문으로 지연 할 수 있습니다.
우와, 이상하게 보이는 코드입니다. –
예외를 무시하는 데 사용할 수 없습니다. 'catch' 블록이 자신의 예외를 throw하지 않으면 원래 예외가 자동으로 다시 발생합니다 (자세한 내용은 링크 된 GOTW를 참조하십시오). – sth
@sth : 확실히 할 수 있습니다. – Potatoswatter