我实现了我的异常
继承自
如下所示:
class MyException : public exception
{
public:
MyException(string exc)
{
this->exc = exc;
}
const char * what() const throw ()
{
return exc.c_str();
}
private:
string exc;
};
现在我抛出
,并假设在我的
,但是我用两种不同的方法对它进行了测试。
部分:
正常捕获
尝试{抛出MyException("This is a exception");} catch (const std::exception exc) { MessageBoxA(NULL,exc.what(),"",MB
_
OK);}
使用引用捕获
尝试{抛出MyException(“这是一个异常”);} catch (const std::exception &exc) { MessageBoxA(NULL,exc.what(),"",MB
_
OK);}
抛出的第一个异常字符串是:
未知异常
和第二个抛出的异常(具有
在catch部分中)是:
这是一个例外
为什么我不能得到我的自定义异常
字符串
在没有引用的情况下正常使用catch时(
)为什么?
好的
通过引用?
发布于 2021-03-01 22:25:51
你正在经历
对象切片
..。
接收派生实例时会发生这种情况
价值
作为它的基类--在您的例子中,捕获
按值。您的派生类的成员在转换为基类的过程中被“切掉”。
当您希望以多态方式使用参数时,通过指针或(const)引用接收总是更可取的。用于捕获
你应该总是通过常量引用来捕捉(我真的想不出这样的场景
不会
)。
https://stackoverflow.com/questions/66423058
复制相似问题