比如说我有以下两个类:
class ChessBoard
{
std::vector <ChessPiece> pieceList;
}
class ChessSquare
{
std::vector <ChessPiece> pieceList;
}
我想要做的是让两个类都能访问完全相同的ChessPiece向量,这样他们都可以对EXACT SAME ChessPiece数据进行读/写访问。例如,当ChessSquare更新pieceList向量时,ChessBoard中相应的pieceList向量也会更新,反之亦然。我将如何实现这一目标?
答案 0 :(得分:4)
使用指针。给每个人一个指向矢量的同一指针的副本。
如果你给他们每个std::shared_ptr
,你就可以获得引用计数的额外好处,并且一旦这两个类都没有使用它就会处理清理。
答案 1 :(得分:1)
使用指向pieceList的指针或引用。
答案 2 :(得分:0)
创建对象ChessPiece
并将此对象的指针发送到ChessBoard
和ChessSquare
。我希望您只能从一个帖子访问ChessPiece
,而是必须使用互斥锁等保护您的ChessPiece
。
答案 3 :(得分:0)
指针是显而易见的选择。但是如果你感到疯狂并希望过度设计你的项目,那么可以将矢量封装在它自己的类中,并使该类成为一个全局可见的单例
答案 4 :(得分:0)
使用指针可能是个好方法,但我认为你应该达到这样的目的:
class ChessBase
{
static std::vector <ChessPiece> pieceList;
}
class ChessBoard : ChessBase
{
//to do what you want.
}
class ChessSquare : ChessBase
{
//to do what your want.
}
您可以访问每个班级中的向量作为其成员。
答案 5 :(得分:0)
看作棋盘是由棋方组成的,我可能会建议在棋盘类中使用矢量并在国际象棋方阵中引用它,也许是这样:
typedef std::vector<ChessPiece> PIECES
class ChessBoard
{
public:
ChessBoard()
{
// NOTE! your app might have more squares than this:
m_pSquare = new ChessSquare( pieceList );
}
private:
PIECES pieceList;
ChessSquare* m_Square;
}
class ChessSquare
{
public:
ChessSquare( const PIECES& pieces )
: refPieceList(pieces)
{
}
private:
const PIECES& refPieceList;
}