如何在以下C ++代码中引发异常

时间:2015-09-03 17:45:02

标签: c++ exception

我的班级SystemManager()有一个名为myObject的私有对象,其构造函数需要另一个类的实例。

如果new失败,我怎么能抛出异常?

The.cpp:

SystemManager::SystemManager(): myObject(new TCPServer()) {  
    ...
}

.h:

class SystemManager{
    ...
    MyObject myObject;
}

2 个答案:

答案 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。

中执行任何操作