在两个不同的类之间共享相同的容器

时间:2013-10-23 06:59:27

标签: c++

比如说我有以下两个类:

class ChessBoard
{
    std::vector <ChessPiece> pieceList;
}

class ChessSquare
{
    std::vector <ChessPiece> pieceList;
}

我想要做的是让两个类都能访问完全相同的ChessPiece向量,这样他们都可以对EXACT SAME ChessPiece数据进行读/写访问。例如,当ChessSquare更新pieceList向量时,ChessBoard中相应的pieceList向量也会更新,反之亦然。我将如何实现这一目标?

6 个答案:

答案 0 :(得分:4)

使用指针。给每个人一个指向矢量的同一指针的副本。

如果你给他们每个std::shared_ptr,你就可以获得引用计数的额外好处,并且一旦这两个类都没有使用它就会处理清理。

答案 1 :(得分:1)

使用指向pieceList的指针或引用。

答案 2 :(得分:0)

创建对象ChessPiece并将此对象的指针发送到ChessBoardChessSquare。我希望您只能从一个帖子访问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;
}