在c++中抛出对象作为引用是如何正确的
How it is right way to throw object as a reference in C++?
我不能理解,下面的代码是如何正确的,
class cls
{
//just to create obj
};
int main(int argc, char* argv[])
{
try
{
throw cls();//throwing obj as ref
}
catch(cls &ref)
{
}
return 0;
}
我抛出cls
对象作为参考,它不会死,因为它来自{}作用域?
因为catch块不能访问try的变量
抛出异常时,实际上生成异常对象的副本。它是catch
块接收到的副本,因此即使原始对象在范围之外,它也不会超出范围。
throw将复制初始化对象,这就是它能够捕获引用的方式。也就是说,抛出任意可能不复杂的对象可能不如使用std::exception
异常处理机制将获取throw表达式的值并将其复制到为此目的保留的内存区域中。因此,抛出异常的总是"按值",而不是"按引用"。
当异常处理程序被激活时,catch形参使用异常处理机制创建的副本初始化:如果形参是引用类型,则初始化为引用该副本,如果形参不是引用类型,则通过副本构造初始化。
相关文章:
- 如何在C++中正确引用来自不同类的类的对象?
- 关于类的 Python 文档 - 对C++的引用不正确
- 对从引用到 std::reference_wrapper 或编译器错误的隐式转换的理解不正确?
- 未定义的引用,即使库正在链接并且它包含正确的符号
- 将此类传递给引用的正确语法是什么?
- 引用计数智能指针的正确实现
- C++ 如何正确引用类属性的值
- 如何正确初始化复制构造函数(以类为引用的构造函数)
- 如何使用类型特征正确推断引用的参数
- 为什么必须引用流插入重载中的正确操作数?
- 在标准算法中,通过引用捕获更正确
- 如何修复生成文件以正确包含 -lcrypto 以避免链接器错误:未定义对"EVP_CIPHER_CTX_new"的引用
- 如何正确访问通过引用从标准输入传递给构造函数的参数的值
- 使用 dlopen() 引用共享库插件的正确方法是什么?
- 声明一个可以使用右值或左值引用的函数的正确方法是什么
- 返回本地对象右值引用,正确或错误
- 返回对类静态数据成员的引用的正确方法是什么?(我正在使用Qt,以防万一它有所作为)
- 这是右值引用的正确用法吗?
- 返回this的右值引用的正确方法
- 为什么编译器无法找出此函数引用的正确重载?