在c++中抛出对象作为引用是如何正确的

How it is right way to throw object as a reference in C++?

本文关键字:引用 何正确 c++ 对象      更新时间:2023-10-16

我不能理解,下面的代码是如何正确的,

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形参使用异常处理机制创建的副本初始化:如果形参是引用类型,则初始化为引用该副本,如果形参不是引用类型,则通过副本构造初始化。