是否有某种方法可以确保析构函数的相对顺序?

问题描述 投票:0回答:1

如果我有类似的东西:

auto foo=Foo(Bar())

Foo的构造函数使用const引用Bar,是否有某种方法可以确保在foo范围的末尾,不会在foo的析构函数之前调用Bar的析构函数,因此即使对Bar的引用仍然有效在foo的析构函数中?

c++17 destructor
1个回答
2
投票

保证析构函数的相对顺序。

auto foo=Foo(Bar());

由于Bar()是临时的,因此保证可以在表达式末尾对其进行破坏:又名分号。您绝对保证Barfoo之前被销毁。

无法延长此临时文件的寿命,您必须对其进行复制。或者:

{
   Bar b;
   auto foo=Foo(b);
}

由于作用域中的对象以与它们构造相反的顺序销毁,因此,由于它们在同一作用域中,因此b将在销毁foo之后销毁。

© www.soinside.com 2019 - 2024. All rights reserved.