コンストラクターで例外をスローできるクラスがあります。適切なスコープで使用できるようにしながら、try / catchブロックでそのクラスのインスタンスを宣言するにはどうすればよいですか?
try { MyClass lMyObject; }
catch (const std::exception& e) { /* Handle constructor exception */ }
lMyObject.DoSomething(); // lMyObject not in scope!
RAIIイディオムを尊重しながら、これを達成するための代替方法はありますか?
init()
二相工法は使いたくない。私が思いついた他の唯一のことは:
MyClass* lMyObject;
try { lMyObject = new MyClass(); }
catch (const std::exception& e) { /* Handle constructor exception */ }
std::shared_ptr<MyClass> lMyObjectPtr(lMyObject);
lMyObjectPtr->DoSomething();
正常に動作しますが、スコープ内の生のポインターとポインターの間接参照には満足していません。これは単なる別のC++いぼですか?