如果一个对象是在本地创建的,并在C++中作为异常抛出,那么本地对象如何在其范围之外有效,即在 catch 块中?
If an object is created locally and thrown as an exception in C++, how can a local object be valid outside it's scope .i.e., in catch block?
在try块中,调用了一个函数"fun(("。在"fun"中创建类"abc"的本地对象,并抛出异常。这个本地对象在"catch"块中被捕获,并且这已经打印了一个正确的值。由于此对象是在本地创建的,因此它不应该打印"0(默认值(",因为在调用 throw 时会发生堆栈展开。
#include <iostream>
using namespace std;
class abc
{
int var;
public:
abc():abc(0){}
abc(int i):var(i){}
void print()
{
cout << "inside abc : " << var << endl;
}
};
void fun()
{
cout << "inside fun()" << endl;
abc obj(10);
throw obj;
}
int main()
{
try
{
cout << "inside try" << endl;
fun();
}catch(abc& ob)
{
ob.print();
}
return 0;
}
输出: 内部尝试
内部乐趣((
内部 ABC : 10
我的期望: 内部尝试 内部乐趣
((
内部 ABC : 0
抛出对象的副本。
相关文章:
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 超出范围时使用对象
- 如何访问超出其块范围的对象?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 对象超出范围/转让所有权
- 从函数返回范围视图时,带有std::span:中间对象所有权的C++Ranges-v3
- 读取互斥对象范围之外的volatile变量,而不是std::atomic
- 是否可以在C++ (C) 中使用全局范围对象(结构)?
- 基于范围的 for 循环将对象移动到另一个容器中?
- 对象超出范围后,引用成员设置为 0
- 哪个函数负责C++全局范围内的类对象初始化?
- 非常量对象的向量似乎在基于范围的 for 循环中被视为常量
- 如果一个对象是在本地创建的,并在C++中作为异常抛出,那么本地对象如何在其范围之外有效,即在 catch 块中?
- 是否有一种方法可以根据派生的可能性值范围限制对象参数
- 类对象未在范围中声明
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- 基于范围的 for 循环,用于包含C++中的指针的自定义链表,仅返回对象
- 带有GCC的C++11中的线程范围对象
- C++ / GCC - 未调用文件范围对象的构造函数