在类中抛出异常的最佳方法是什么
What is the best way to throw exceptions in classes?
当在类中抛出异常时,程序员的工作是确保在类中捕获此异常吗? 还是最佳实践是假设此异常将在主文件/运行器程序中捕获? 我相信是后者,但我有点不确定....采用以下代码:
#include <stdexcept>
#include <iostream>
using namespace std; // supposedly trustworthy duck
class Duck
{
public:
Duck(int quack_nominee);
private:
int quack_strength;
};
Duck::Duck(int quack_nominee)
{
if (quack_nominee < 0)
{
throw runtime_error("A quack having a negative value produces undefined behavior on reality.");
}
quack_strength = quack_nominee;
}
上述代码是良好做法吗? 我假设抛出的runtime_error会被某个地方抓住。 如果使用我的类的程序员没有实现try-catch块,则.exe文件将崩溃(至少在我的IDE和编译器上(。
另外,如果我应该在类本身中有一个 try-catch 块,是否有可能合法地实现它?
异常的全部要点是终止函数的执行流,并通知调用方函数内无法处理的错误条件。所以不,你绝对不必抓住你自己的异常,因为它违背了异常的目的。
另一个问题是您应该使用异常报告哪种类型的错误。这主要取决于特定的用例,但最常见的情况是无效的输入参数或外部错误(例如,来自操作系统或数据库或程序外部的任何内容(,这些错误无法在不违反"最小意外原则"的情况下在函数中处理。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?