Ho la seguente classe rifilata:
#include <vector>
#include "Tile.h"
class Board {
std::vector<Tile> boardArr;
// VVV Bad Practice? Safe?
Tile& getTileAt(unsigned int x, unsigned int y);
public:
Board(int width, int height);
};
Si noti che il vettore rimane della stessa dimensione una volta inizializzata la classe; Non ho metodi per modificarlo. Da quanto ho capito, vector
s è garantito per non muoversi, a meno che non sia necessario ridimensionarlo, quindi un riferimento in esso dovrebbe essere sicuro in questo caso.
Da quello che posso dire, questo dovrebbe essere sicuro. Il metodo è privato, quindi non dovrebbe esserci alcun modo per i riferimenti alla perdita.
L'alternativa migliore alla funzione precedente è di restituire una copia di Tile
, modificarla, quindi copiare il riquadro modificato indietro. Ho trovato che lo utilizza direttamente molto più pulito, quindi preferirei che sia sicuro.
Questo sarà a thread singolo, e finora, è solo l'uso è di fare cose semplici a un riquadro, come attivare o disattivare una bandiera interna. Un esempio di come lo sto usando:
TurnResult Board::flipTile(unsigned int x, unsigned int y) {
return getTileAt(x, y).flipTile();
}
void Board::setTileFlag(unsigned int x, unsigned int y, bool flagState) {
getTileAt(x, y).setFlag(flagState);
}