Есть ли правило, в котором указано, в каком порядке уничтожены члены std :: tuple?C++ 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' реализован в вашей стандартной библиотеке. – Arunmu
Я не могу найти ничего в спецификации, которая определяет порядок уничтожения для 'std :: tuple'. Вероятно, должно быть подано как неуказанное. – 101010
http://stackoverflow.com/a/27663655/576911 –