有什么方法可以保证析构函数的相对顺序吗?
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()
是临时的,所以它保证在表达式的末尾被破坏:也就是分号。你绝对保证 Bar
在 foo
.
之前被销毁
无法延长此临时文件的生命周期,您必须复制它(可能通过移动它)。或者:
{
Bar b;
auto foo=Foo(b);
}
由于单个作用域中的对象按构造顺序相反的顺序被销毁,因此由于它们在同一作用域中,b
将在 foo
被销毁后被销毁。
如果我有类似的东西:
auto foo=Foo(Bar())
其中 Foo 的构造函数采用对 Bar 的 const 引用,是否有某种方法可以确保 Bar 的析构函数不会在 foo 范围末尾的 foo 上的析构函数之前被调用,这样对 Bar 的引用仍然会即使在 foo 的析构函数中也有效?
保证析构函数的相对顺序。
auto foo=Foo(Bar());
因为 Bar()
是临时的,所以它保证在表达式的末尾被破坏:也就是分号。你绝对保证 Bar
在 foo
.
无法延长此临时文件的生命周期,您必须复制它(可能通过移动它)。或者:
{
Bar b;
auto foo=Foo(b);
}
由于单个作用域中的对象按构造顺序相反的顺序被销毁,因此由于它们在同一作用域中,b
将在 foo
被销毁后被销毁。