Есть ли правило, в котором говорится, в каком порядке уничтожаются члены std :: tuple?
Например, если Function1
возвращает std::tuple<std::unique_ptr<ClassA>, std::unique_ptr<ClassB>>
в Function2
, то могу ли я быть уверен, что (когда область действия Function2
останется) экземпляр ClassB
, на который ссылается второй член, будет уничтожен до того, как экземпляр ClassA
, на который ссылается первый член?
std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > Function1()
{
std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > garbage;
get<0>(garbage).reset( /* ... */ );
get<1>(garbage).reset( /* ... */ );
return garbage;
}
void Function2()
{
auto to_be_destroyed = Function1();
// ... do something else
// to_be_destroyed leaves scope
// Is the instance of ClassB destroyed before the instance of ClassA?
}
std::tuple
реализован в вашей стандартной библиотеке. - person Arunmu   schedule 21.08.2016std::tuple
. Вероятно, следует подать как неуказанное. - person 101010   schedule 21.08.2016