我该如何投球
How do I throw polymorphically?
本文关键字:何投球 更新时间:2023-10-16
class MyExceptionBase{};
class MyExceptionDerived : public MyExceptionBase { };
void f(MyExceptionBase& e)
{
// ... throw e;
}
void g()
{
MyExceptionDerived e;
try{
f(e);
}
catch (MyExceptionDerived& e)
{
...code to handle MyExceptionDerived...
}
catch (...)
{
...code to handle other exceptions...
}
}
如果您尝试这样做,在运行时,当输入catch(…)子句而不是catch(MyExceptionDerived&)子句时,会发生什么?
throw
从概念上抛出异常对象的副本。由于您正在抛出函数f()
,因此您正在切片MyExceptionBase
的副本并抛出它。
注意:总是从std::runtime_error
或std::logic_error
派生异常库。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 类中的 C++ int 被设置为值,似乎不知从何而来
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 收益率和回报有何不同?
- 覆盖私有功能,它与受保护功能有何不同?
- 擦除删除成语的性能增益从何而来
- 无论代码长度如何,以下代码的内存要求有何不同?
- "virtual"对C++析构函数有何影响?
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- 系统时间从何而来?
- stl::unordered_map 和 stl::vector 的销毁有何不同
- C++ 友元函数在内存位置上有何不同?
- 为什么我可以在不链接任何额外库的情况下包含 sys/*.h
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- std::u8string与std::string有何不同?
- 功能和变量从何而来
- 两种类型转换有何不同?