0

例如说我有以下两个类:

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

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

我想要做的是允许两个类都可以访问完全相同的 ChessPiece 向量,以便它们都具有对 EXACT SAME ChessPiece 数据的读/写访问权限。例如,当 ChessSquare 更新 pieceList 向量时,ChessBoard 中相应的pieceList 向量也会更新,反之亦然。我将如何实施呢?

4

6 回答 6

4

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

如果你给它们每一个 a std::shared_ptr,那么一旦两个类都没有使用它,你就会获得引用计数和清理的额外好处。

于 2013-10-23T07:03:17.730 回答
1

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

于 2013-10-23T07:06:10.653 回答
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;
}
于 2013-10-23T08:11:11.127 回答
0

使用指针可能是一个好方法,但我认为你应该这样实现你的观点:

class ChessBase
{
    static std::vector <ChessPiece> pieceList;
}

class ChessBoard : ChessBase
{
//to do what you want.
}

class ChessSquare : ChessBase
{
//to do what your want.
}

您可以将每个类中的向量作为其成员访问。

于 2013-10-23T07:48:16.697 回答
0

指针是显而易见的选择。但是,如果您感到疯狂并想要过度设计您的项目,您可以将向量封装在它自己的类中,并使该类成为全局可见的单例

于 2013-10-23T07:41:16.497 回答
0

创建对象ChessPiece并将该对象的指针发送到ChessBoardand ChessSquare。我希望你ChessPiece 只能从一个线程访问,而不是你必须保护你ChessPiece使用互斥锁或类似的东西。

于 2013-10-23T07:06:13.033 回答