繁体   English   中英

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

[英]How to throw an exception in the following C++ code

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

如果new失败,我如何抛出异常?

The.cpp:

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

.h:

class SystemManager{
    ...
    MyObject myObject;
}

在这种情况下, 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/

new如果失败已经抛出异常。 如果TCP_server的构造函数失败,那么它也应抛出异常。 因此,您无需在SystemManager ctor中执行任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM