C++:构造函数内部的异常:是还是否



在互联网上我找到了一些建议,比如:

  • ">不要从构造函数内部抛出异常";以及
  • ">如果构造对象,请从构造函数内部抛出异常">

它们相互矛盾,两者都对吗?

例如,一个类打开一个文件,读取数据并关闭文件,所有这些都在构造函数中。打开或读取文件时可能会遇到错误。应该如何处理此错误?

我应该听从什么建议?从构造函数抛出异常可能吗?这是一种好的做法吗?

如果异常不是一个好主意,那么应该如何处理构造函数中的错误?

(我在Linux上使用GCC C++14(

好建议:

  • 不应允许异常从析构函数中转义

这可能已经演变成了糟糕的建议:

  • 不要从构造函数内部抛出异常

构造函数中允许出现异常。如果构造失败,抛出异常将确保对象未被构造,从而消除在无效状态下使用对象的可能性。

另一种方法(避免(是将容易出错的任务转移到init()函数中,并让构造函数不执行任何可能失败的操作。这可能导致使用处于无效状态的对象,并可能通过检查来污染所有方法,以确保已调用init()

最新更新