相关疑难解决方法(0)

C++中异常对象的范围

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

c++ scope exception-handling

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

为什么我的C++异常没有被捕获?

我有一些使用非常标准的异常模式的C++代码:

try {
  // some code that throws a std::exception
}
catch (std::exception &e) {
  // handle the exception
}
Run Code Online (Sandbox Code Playgroud)

问题是异常没有被捕获,我无法弄清楚原因.

代码编译为OS X中的静态库(通过Xcode).该库链接到一个Cocoa应用程序,通过Objective-C++ thunk调用所讨论的函数.我怀疑Objective-C和C++之间的相互作用是罪魁祸首,但我所有试图将其解决的尝试都失败了.

我无法创建一个简单的示例,在一个简单的示例中重现此行为.当我从大型程序的上下文中取出相关代码时,一切正常.

任何人都可以建议为什么我的例外没有被抓住?

c++ exception-handling objective-c

8
推荐指数
5
解决办法
1万
查看次数

异常对象在哪里有空间,堆或堆栈,以及如何在不同的类中访问它?

最近一位采访者问我C++中的异常对象在哪里分配,堆栈还是堆栈?我不确定,但我回答堆栈,因为我认为没有"新"或"malloc".这是对的吗?

然后他一直问我,如果它在堆栈上,假设A类抛出异常对象,让我们说"e",B类抓住"e".由于"e"在A的堆栈上,那么B如何能够访问这个"e"?

我对第二个问题不是很清楚.任何人都可以给我一些示例代码,显示"A类投掷e和B级抓住它"?另外,我猜B可以通过复制值或地址来捕获e但是访问者只是拒绝了我的答案而没有给我正确的答案,那么正确的答案是什么,是否有任何机制可以确保类对象可以捕获来自其他类对象的异常?谢谢〜

c++ memory heap stack exception

5
推荐指数
1
解决办法
1692
查看次数

C++ 未实现异常

从这里的答案我实现了我的课程NotImplementedException

//exceptions.h
namespace base
{
    class NotImplementedException : public std::logic_error
    {
    public:
        virtual char const* what() { return "Function not yet implemented."; }
    };
}
Run Code Online (Sandbox Code Playgroud)

在另一个类中,我想抛出以下异常(相同的命名空间):

    std::string to_string() override
    {
        throw NotImplementedException();
    }
Run Code Online (Sandbox Code Playgroud)

to_string方法是抽象基类的重写方法。

namespace BSE {
    class BaseObject
    {
        virtual std::string to_string() = 0;
    };
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,前面的代码的编译显示了这个错误:

error C2280: BSE::NotImplementedException::NotImplementedException(void)': attempting to reference a deleted function`
Run Code Online (Sandbox Code Playgroud)

这里我了解到问题与移动构造函数或赋值有关,根据cppreference.com - throw (1)可能是这种情况:

首先,从表达式复制初始化异常对象(这可能会调用右值表达式的移动构造函数,并且复制/移动可能会受到复制省略的影响)

我尝试添加

    NotImplementedException(const NotImplementedException&) = default;
    NotImplementedException& operator=(const NotImplementedException&) = default; …
Run Code Online (Sandbox Code Playgroud)

c++ move

0
推荐指数
1
解决办法
8575
查看次数

标签 统计

c++ ×4

exception-handling ×2

exception ×1

heap ×1

memory ×1

move ×1

objective-c ×1

scope ×1

stack ×1