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

use*_*649 3 c++ exception

我的类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)

Ale*_*lex 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( ... )
    { }
}
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/