1

古典的な C スタイルの配列に依存する次のコードをリファクタリングして、C++ のようにしようとしています。

fb::Block *blocks[Panel::X][Panel::Y];

void Panel::mechanics(int64_t tick) {
  for (int32_t y = 1; y < Panel::Y; y++) {
    for (int32_t x = 0; x < Panel::X; x++) {
      fb::Block* current = blocks[x][y];
      if (current -- nullptr) {
        continue;
      }
      // Switching the 2 pointers
      blocks[x][y] = blocks[x + 1][y];
      blocks[x + 1][y] = current;
    }
  }
}

次のコードは と に依存しstd::arrayていstd::unique_ptrます。前のコードで行っていたように、2 つの値を交換する必要がありますが、それが正しい方法かどうかはわかりません。

std::array<std::array<std::unique_ptr<fb::Block>, Panel::Y>, Panel::X> blocks;

void Panel::mechanics(int64_t tick) {
  for (int32_t y = 1; y < Panel::Y; y++) {
    for (int32_t x = 0; x < Panel::X; x++) {
      std::unique_ptr<fb::Block>& current = blocks[x][y];
      if (!current) {
        continue;
      }
      // Swapping the 2 pointers
      blocks[x][y].swap(blocks[x + 1][y]);
    }
  }
}

メンバーはswapこれを達成する正しい方法ですか?

4

1 に答える 1

3

確かにそうです。unique_ptr::swapのドキュメントを参照してください

于 2013-02-16T21:37:11.213 に答える