如何从构造函数中成员的默认初始化中捕获异常
How could I catch an exception from the default initialization of members in a constructor?
在我的构造函数中,我必须初始化_socket。但是初始化套接字可能会引发异常。如何捕获和处理异常?
谢谢!这是我的代码:
tftp_server::tftp_server(unsigned short port_number)
: _socket(_io_service, udp::endpoint(udp::v4(), port_number))
{
//...
}
您可以使用函数try块。
tftp_server::tftp_server(unsigned short port_number)
try
: _socket(_io_service, udp::endpoint(udp::v4(), port_number))
{
//...
}
catch(...)
{
}
但是,引用Herb Sutter(GotW 66(的话:
如果catch块没有抛出(或者重新抛出原始异常,或抛出新的东西(,并且控制到达构造函数或析构函数的catch块,然后是原始异常会自动重新引发。
换句话说(也是萨特(
构造函数的唯一(仅重复(可能用途函数try块用于转换从基或成员子对象
总之:你可以这样做,但通常没有意义。
请参阅下面的代码:
tftp_server::tftp_server(unsigned short port_number)
try : _socket(_io_service, udp::endpoint(udp::v4(), port_number))
{
// Do your stuff
}
catch(...)
{
// Handle exception
}
相关文章:
- 使用 std::分配器在 constexpr 中进行默认初始化
- 为什么对象默认初始化,但基元不在C++?
- 为什么std::atomic的默认构造函数不默认初始化底层存储值
- 两个成员,在Base中默认初始化,可能在Derived中非默认初始化
- 默认初始化无法正常工作
- C++11默认初始化/值初始化/直接初始化
- make_shared是否对每个成员变量执行默认初始化(零初始化)
- 是否可以默认初始化具有已删除默认构造函数的类类型
- 对象成员数组C++默认初始化
- POD成员默认初始化无括号
- 如何在不使用 new 的情况下进行默认初始化
- 有没有办法欺骗 std::make_shared 使用默认初始化
- 枚举类默认初始化
- 是默认的构造函数和默认初始化
- 为什么在C 中不允许使用括号的默认初始化
- 默认初始化的含义在C 11中发生了变化
- Main()函数中的默认初始化
- WINHTTP_CURRENT_USER_IE_PROXY_CONFIG默认初始化
- 强制本地变量默认初始化
- 默认初始化混乱