4

次のような関数があります。これは、移動セマンティクスによってコピー不可能なクラスを返します。

MyClass&& MyFunction() {
  MyClass myClass;
  do some stuff;
  return std::move(myClass);
}

そして、それはによってアクセスされます

main() {
  MyClass myClass = MyFunction();
}

このクラスはコピー防止に利用boost::noncopyableされます。コンストラクター、ムーブ コンストラクター、ムーブ代入があります。私の問題は、デストラクタが移動コンストラクタの前に呼び出されることです。私は何を間違えましたか?

4

1 に答える 1

5

ローカル変数への参照を返しています。左辺値参照か右辺値参照かは関係ありません。

あなたはおそらくやるべきです

MyClass MyFunction() {
  MyClass myClass;
  do some stuff;
  return myClass;
}

結果をコピーまたは移動する方法をコンパイラに判断させます。

于 2012-07-03T17:04:49.323 に答える