c++ - 带有 bad_alloc 的虚拟类的多态性
问题描述
我从 C++ 开始,出于好奇,我试图用多态性捕获异常。我在尝试捕获std
异常时观察差异行为,例如bad_alloc
与我的自定义异常
在案例 1 中,我抛出了一个bad_alloc
异常,该异常被带有参数 () 的 catch 语句捕获,exception e
what 语句将异常显示为bad_alloc()
。
在案例 2 中,我抛出MyException
的它是从异常类派生的,它被带有参数 ( exception e
) 的 catch 语句捕获,what 语句显示异常是一个"Unknown exception"
我可以认为它正在调用what()
基类异常的函数的异常。
在案例 3 中,我可以在使用指针时从 catch调用what()
子类的函数并打印出来MyException
"My custom Exception"
#include<iostream>
using namespace std;
class MyException : public exception {
public:
const char* what() const throw() {
return "My custom Exception";
}
};
int main() {
try {
bool case1 = false, case2=true, case3=true;
if (case1) {
throw bad_alloc();
}
if (case2) {
throw MyException();
}
if (case3) {
MyException* o = new MyException();
throw o;
}
}
catch (exception* e) {
cout << endl << "catching exception with polymorphism, exception type is " << e->what();
}
catch (exception e) {
cout << endl << "catching exception with polymorphism exception type is " << e.what();
}
}
我的疑问是,当有规则应该使用基类类型的指针或引用访问虚拟函数(在这种情况下)以实现运行时多态性时,bad_alloc
异常如何能够调用自身的函数。在这种情况下,子类对象直接以多态性访问虚函数。what()
what()
解决方案
推荐阅读
- nestjs - 在带有 nestjs 的 typeorm 中,没有检测到 ormconfig.json
- python - 使用 PGMPY 推理,我得到了所有值的均匀分布概率的输出。有人可以向我解释为什么吗?
- azure-data-explorer - 在更新策略处于活动状态时更新更新策略功能
- php - 如何从 aws s3 putobject 响应中获取状态码
- azure-active-directory - 从 js 访问 Azure AD 用户
- html - HTML 中的换行标记是否等同于 Markdown 中的换行格式?
- java - 如何处理Java中一个方法抛出的异常到另一个方法中?
- python - 脚本出错时的回滚/清理
- c# - PostgreSQL:找不到存储过程
- python - Python manage.py 识别出 0 个错误但无法运行服务器