在互联网上我找到了一些建议,比如:
- ">不要从构造函数内部抛出异常";以及
- ">如果构造对象,请从构造函数内部抛出异常">
它们相互矛盾,两者都对吗?
例如,一个类打开一个文件,读取数据并关闭文件,所有这些都在构造函数中。打开或读取文件时可能会遇到错误。应该如何处理此错误?
我应该听从什么建议?从构造函数抛出异常可能吗?这是一种好的做法吗?
如果异常不是一个好主意,那么应该如何处理构造函数中的错误?
(我在Linux上使用GCC C++14(
好建议:
- 不应允许异常从析构函数中转义
这可能已经演变成了糟糕的建议:
- 不要从构造函数内部抛出异常
构造函数中允许出现异常。如果构造失败,抛出异常将确保对象未被构造,从而消除在无效状态下使用对象的可能性。
另一种方法(避免(是将容易出错的任务转移到init()
函数中,并让构造函数不执行任何可能失败的操作。这可能导致使用处于无效状态的对象,并可能通过检查来污染所有方法,以确保已调用init()
。