如果我有类似的东西:
auto foo=Foo(Bar())
Foo的构造函数使用const引用Bar,是否有某种方法可以确保在foo范围的末尾,不会在foo的析构函数之前调用Bar的析构函数,因此即使对Bar的引用仍然有效在foo的析构函数中?
保证析构函数的相对顺序。
auto foo=Foo(Bar());
由于Bar()
是临时的,因此保证可以在表达式末尾对其进行破坏:又名分号。您绝对保证Bar
在foo
之前被销毁。
无法延长此临时文件的寿命,您必须对其进行复制。或者:
{
Bar b;
auto foo=Foo(b);
}
由于作用域中的对象以与它们构造相反的顺序销毁,因此,由于它们在同一作用域中,因此b
将在销毁foo
之后销毁。