首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从继承的异常类引发字符串异常

从继承的异常类引发字符串异常
EN

Stack Overflow用户
提问于 2021-03-01 21:31:37
回答 3查看 44关注 0票数 2

我实现了我的异常

继承自

如下所示:

代码语言:javascript
运行
复制
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时(

)为什么?

好的

通过引用?

EN

Stack Overflow用户

回答已采纳

发布于 2021-03-01 22:25:51

你正在经历

对象切片

..。

接收派生实例时会发生这种情况

价值

作为它的基类--在您的例子中,捕获

按值。您的派生类的成员在转换为基类的过程中被“切掉”。

当您希望以多态方式使用参数时,通过指针或(const)引用接收总是更可取的。用于捕获

你应该总是通过常量引用来捕捉(我真的想不出这样的场景

不会

)。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66423058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档