有没有办法保证析构函数的相对顺序?

Is there some way to guarantee relative order of destructors?

本文关键字:相对 顺序 析构函数 有没有      更新时间:2023-10-16

如果我有类似的东西:

auto foo=Foo(Bar())

在 Foo 的构造函数采用对 Bar 的常量引用的情况下,有没有办法确保在 foo 的作用域结束时,Bar 的析构函数不会在 foo 上的析构函数之前被调用,以便即使在 foo 的析构函数中对 Bar 的引用仍然有效?

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

auto foo=Foo(Bar());

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

没有办法延长这个临时的生存期,你必须复制它(可能通过移动它(。或者:

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

由于单个作用域中的对象以与构造相同的顺序销毁,因此由于这些对象位于同一作用域中,因此b将在销毁foo后销毁。