有什么方法可以保证析构函数的相对顺序吗?

Is there some way to guarantee relative order of destructors?

如果我有类似的东西:

auto foo=Foo(Bar())

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

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

auto foo=Foo(Bar());

因为 Bar() 是临时的,所以它保证在表达式的末尾被破坏:也就是分号。你绝对保证 Barfoo.

之前被销毁

无法延长此临时文件的生命周期,您必须复制它(可能通过移动它)。或者:

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

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