我的类SystemManager()有一个私有对象,myObject其构造函数需要另一个类的实例.
如果new失败,我如何抛出异常?
The.cpp:
SystemManager::SystemManager(): myObject(new TCPServer()) {
...
}
Run Code Online (Sandbox Code Playgroud)
.h:
class SystemManager{
...
MyObject myObject;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,new已经抛出异常,但想象其他情况,您不使用new运算符,例如:
MyClass::MyClass( int var1, int var2 )
: m_var1( var1 ),
m_obj2( var1 ) // If this one throws an exception,
// it can't be caught.
{
try
{
// Constructor body.
}
catch( ... )
{ }
}
Run Code Online (Sandbox Code Playgroud)
因此,要从初始化列表中捕获异常,您必须使用特殊类型的try-catch
MyClass::MyClass( int var1, int var2 )
try : m_var1( var1 ),
m_obj2( var1 ) // Now I can catch the exception.
{
// Constructor body.
}
catch( ... )
{ }
Run Code Online (Sandbox Code Playgroud)
资料来源:https://weseetips.wordpress.com/tag/exception-from-constructor-initializer-list/