gpt4 book ai didi

在构造函数成员初始值设定项中抛出 C++ 异常?

转载 作者:行者123 更新时间:2023-11-30 00:37:06 26 4
gpt4 key购买 nike

考虑以下情况:

struct X { ... };

struct Y
{
Y(...);

...

X x;

...
}

X f()
{
...

if (...)
throw E;

...
}

Y::Y(...) :
... ,
x(f()) ,
...
{
...
}

这里有没有未定义的行为?这样的设计在抛E的时候有没有什么陷阱或者潜在的问题?

更新:

Y::x 可能不是Y 的唯一成员变量,也可能不是类中的第一个成员变量,并且可能在中途被初始化Y::Y 初始化列表。

最佳答案

Is there any undefined behaviour here?

没有。 Y 的构造中止。

Are there any gotchas or potential problems with such a design when E is thrown?

没有 Y 被创建,所以没有析构函数可以调用。完全构造的元素的析构函数,那些在类主体中 x 之前声明的元素,将被自动调用(否则你怎么知道它抛出时你的初始化列表有多远)。如果你需要销毁任何东西,那么你必须捕获异常并自己销毁它。你不能吸收异常,你可以重新抛出它,抛出一个新的异常,或者什么都不做,无论如何都会导致异常被重新抛出。对于您的特定用例,不应破坏任何东西,因为根本不会调用构造函数主体。

关于在构造函数成员初始值设定项中抛出 C++ 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14187255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com