构造函数中的网络连接设置:好还是坏?

ceo*_*ceo 10 c++ network-programming

我正在开发一个处理与远程进程交互的类,该进程可能有也可能不可用; 实际上在大多数情况下它不会.如果不是这样,那个阶级的对象在生活中没有任何目的,需要消失.

它不那么难看:

  1. 处理构造函数中的连接设置,如果进程不存在则抛出异常.
  2. 在单独的connect()方法中处理连接设置,如果进程不存在则返回错误代码.

在选项1)中,调用代码当然必须包装该类的实例化以及在try()块中处理它的所有其他内容.在选项2中,它可以简单地检查connect()的返回值,如果失败则返回(销毁对象),但它不太符合RAII,

相关地,如果我使用选项1),最好抛出一个std :: exception类,从中派生我自己的异常类,滚动我自己的未完成的异常类,或者只是抛出一个字符串?我想包括一些失败的迹象,这似乎排除了第一个失败.

编辑澄清:远程进程在同一台机器上,因此::connect()呼叫阻止的可能性很小.

Soa*_*Box 6

我认为这是不好做阻塞 connect()在构造函数中,因为阻塞性质是不是一个典型的构造对象的期望.因此,您的班级用户可能会对此功能感到困惑.

至于异常,我认为从std :: exception派生一个新类通常是最好的(但也是最多的工作).这允许捕获器使用catch (const myexception &e) {...}语句对该特定类型的异常执行操作,并且还使用a对所有异常执行一项操作catch (const std::exception &e) {...}.

查看相关问题:构造函数应该完成多少工作?