我有一个可以在其构造函数中引发异常的类。如何在 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++ 疣吗?