我的班级SystemManager()
有一个名为myObject
的私有对象,其构造函数需要另一个类的实例。
如果new
失败,我怎么能抛出异常?
The.cpp:
SystemManager::SystemManager(): myObject(new TCPServer()) {
...
}
.h:
class SystemManager{
...
MyObject myObject;
}
答案 0 :(得分:5)
在这种情况下,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( ... )
{ }
}
因此,要从初始化列表中捕获异常,您必须使用特殊类型的try-catch
MyClass::MyClass( int var1, int var2 )
try : m_var1( var1 ),
m_obj2( var1 ) // Now I can catch the exception.
{
// Constructor body.
}
catch( ... )
{ }
来源:https://weseetips.wordpress.com/tag/exception-from-constructor-initializer-list/
答案 1 :(得分:2)
new
已经如果失败则抛出异常。如果TCP_server
的构造函数失败,那么它也应抛出异常。因此,您无需在SystemManager
ctor。