Относительный порядок деструкторов гарантирован.
auto foo=Foo(Bar());
Поскольку Bar()
является временным, то он гарантированно будет уничтожен в конце выражения: aka точка с запятой. Вы абсолютно гарантированы, что Bar
будет уничтожено до foo
.
. Невозможно продлить срок действия этого временного файла, вам придется сделать его копию (возможно, переместив его). , В качестве альтернативы:
{
Bar b;
auto foo=Foo(b);
}
Поскольку объекты в одной области видимости уничтожаются в противоположном порядке их построения, то, поскольку они находятся в той же области видимости, b
будет уничтожен после уничтожения foo
.