相关疑难解决方法(0)

C++中异常对象的范围

C++中异常对象的范围是什么?一旦执行catch处理程序,它是否会超出范围?另外,如果我创建一个未命名的异常对象并抛出它,那么在捕获该异常时,如果我通过const引用或非const引用捕获它是否重要?

c++ scope exception-handling

39
推荐指数
2
解决办法
8340
查看次数

C++中抛出异常的生命周期

请考虑以下简单的C++代码:

void foo() {
    throw(my_exception());
}

void check_exc(const my_exception &exc) {
    /* Do stuff with exc */
}

void bar() {
    try {
        foo();
    } catch(const my_exception &exc) {
        check_exc(exc);
    }
}
Run Code Online (Sandbox Code Playgroud)

bar的异常处理程序中,引用的异常如何exc仍然存在,看看它是如何在foo堆栈帧中分配的?在异常处理程序运行时,该帧是否应该被解除,并且在那里分配的任何值都已经被认为是死的?特别是因为我明确地调用了另一个需要堆栈空间的函数.

作为一名试图学习C++的C程序员,我在这里误解了什么?这些不同的值实际上存在于内存中,更准确地说是什么?

c++ exception-handling

3
推荐指数
1
解决办法
329
查看次数

std :: exception拥有什么?

我正在派生我自己的异常,调用它MyException,std::system_error从而重写what()以计算并返回我的消息.MyException的初始化列表不会调用带有消息的system_error构造函数覆盖.

如果我抓住一个MyException,并将其复制到std::exception调用的结果what()std::exception就是nullptr.这是有道理的.

我的问题是,如果我确实使用了在初始化时接收消息的system_exception的构造函数MyException,是否指定system_error将获取消息的副本并拥有它并释放它?

我假设这将使std::exception副本MyException能够返回有效的what().虽然我会在每次MyExceptions创建新内容时计算"什么"需要考虑性能.只有在首次调用what()时,我才能懒惰地计算它.

我有点担心'what'字符串的所有权what()返回a char*而不是a const std::string&.

代码是这样的(我还没有编译):

    class MyException : public std::system_error
    {
        std::string what_;
    public:
        MyException(int errorValue, const std::error_category& category)
            : std::system_error(errorValue, category)
        {}

        char* what() const
        {
           what_ = "MyException: " + to_string(code().value());
           return what_.c_str();
        }
    };

    int main()
    {
        std::exception ex;

        try
        { …
Run Code Online (Sandbox Code Playgroud)

c++ exception std system-error c++14

2
推荐指数
1
解决办法
811
查看次数

标签 统计

c++ ×3

exception-handling ×2

c++14 ×1

exception ×1

scope ×1

std ×1

system-error ×1