-1

auto_ptrC++ 標準は、関数から値によって のペイロードを返すときに、ここでクラッシュしないことを保証しますか?

class Foo { ... };

std::auto_ptr<Foo> createFoo() { 
  return std::auto_ptr<Foo>(new Foo(...));
}
...
Foo getFoo() {
  std::auto_ptr<Foo> foo(createFoo());
  return *foo; /// would be here a crash?
}

/// main
const Foo& foo(getFoo());

標準に従ってここで何が起こっているのですか:*fooコピーされ、次にfoo破棄され、最後returnに実行されますか? または、ステップの別の順序がありますか?

この例を GCC でテストしましたが、クラッシュはありませんでしたが、別のコンパイラで動作するかどうかはわかりません。

4

2 に答える 2

2

値によって返されるためgetFoo、オブジェクトの (さらに別の) コピーが作成されFooます。その後、元のオブジェクトが によって削除されても問題ありませんauto_ptr

とにかく奇妙なコードですが、を使用してからauto_ptrコピーを作成します。

于 2012-02-19T11:45:29.467 に答える
1

非常に奇妙なコードですが、はい、保証されています。RVO や移動のセマンティクスがないため、問題ありません。

于 2012-02-19T11:13:13.587 に答える