在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
的实现方式。 - Arunmustd::tuple
销毁顺序的说明。可能应该将其视为未指定并进行归档。 - 101010