2

このMSDNの記事を参照すると、最後に(セクション:ロバストプログラミング)、次のように記載されています。

リソースリークを防ぐために、ムーブ代入演算子で常にリソース(メモリ、ファイルハンドル、ソケットなど)を解放してください。

代わりにムーブ代入が次のように実装された場合はどうなりますか。

MemoryBlock& operator=(MemoryBlock&& other)
{
   if (this != &other)
   {
      std::swap(_data, other._data);
      std::swap(_length, other._length);
   }
   return *this;
}

「他の」参照の右辺値の「_data」は、スコープ外になると解放されませんか?

4

1 に答える 1

1

はい、other._dataスコープ外になると解放されます(もちろん、優れたデストラクタを想定しています)。ただし、考慮すべき項目が1つあります。タイムリーother._dataな破棄が必要なリソースを参照している場合、この設計の後半で破棄される可能性があります。例として、ミューテックスのロック状態があります。

于 2011-03-16T14:27:43.773 に答える