gpt4 book ai didi

c++ - 构造函数中的网络连接设置 : good or bad?

转载 作者:可可西里 更新时间:2023-11-01 15:54:31 26 4
gpt4 key购买 nike

我正在开发一个类来处理与可能可用或不可用的远程进程的交互;事实上在大多数情况下它不会。如果不是,则该类的对象在生活中没有任何目的,需要消失。

是否不那么丑陋:

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

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

相关地,如果我选择选项 1),是抛出一个 std::exception 类、从中派生我自己的异常类、滚动我自己的非派生异常类,还是只抛出一个字符串更好?我想包括一些失败的迹象,这似乎排除了第一个。

编辑澄清:远程进程在同一台机器上,所以 ::connect() 调用不太可能阻塞。

最佳答案

我认为在构造函数中执行阻塞 connect() 是不好的,因为阻塞性质不是人们通常期望从构造对象中得到的东西。因此,您类(class)的用户可能会对这个功能感到困惑。

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

参见相关问题:How much work should be done in a constructor?

关于c++ - 构造函数中的网络连接设置 : good or bad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com