std :: tupleのメンバーがどの順序で破棄されるかを示す規則はありますか?例えばC++ std :: tuple破棄の順序
Function1
がFunction2
にstd::tuple<std::unique_ptr<ClassA>, std::unique_ptr<ClassB>>
を返す場合、私はClassA
のインスタンスによって参照される前に、第2の部材によって参照ClassB
のインスタンスが破棄される(Function2
の範囲が残っている場合)ことを確認することができ最初のメンバー?クラン3.4
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 –