gpt4 book ai didi

c++ - 构造函数和析构函数的调用顺序?

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:29 25 4
gpt4 key购买 nike

假设我们有两个具有自动存储持续时间的对象:

{
ClassA objA(...);
ClassB objB(...);

// [A] code that uses objA and objB.

// [B] objA is no longer used after this point.

// ... more code ...

} // [C] objA and objB go out of scope.
  1. C++ 标准是否规定了objAobjB 构造函数的相对顺序?例如,我们是否可以假设 objA 的构造函数引起的任何副作用在调用 objB 的构造函数时都是可见的?
  2. 在 [C] 中,将调用 objAobjB 的析构函数。这些析构函数是否有类似的排序要求?
  3. 最后,如果 active 分析显示 objA 在点 [B] 之后已死,则 C++ 编译器是否允许“早”调用 objA 的析构函数,即,在代码中的点 [B] 和 [C] 之间?

最佳答案

1 Does the C++ standard specify the relative sequencing of the constructors for objA and objB? For example, can we assume that any side-effects caused by objA's constructor will be visible when objB's constructor is invoked?

是的。 objAobjB 之前构造。

2 At [C] destructors for objA and objB will be invoked. Is there a similar sequencing requirement on these destructors?

是的,objBobjA 之前被销毁。破坏顺序与构造顺序相反。

3 Finally, if liveness analysis shows that objA is dead after point [B], is a C++ compiler allowed to invoke the destructor for objA "early", i.e., between points [B] and [C] in the code?

如果有副作用则不行。编译器必须遵循 as-if 规则。

澄清一下:假设规则适用于上述所有三点。

关于c++ - 构造函数和析构函数的调用顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17335671/

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