使对象的向量彼此独立

making vectors of an object independent of each other

我有一个关于向量的问题,shared_ptr 和复制 c'tors。

class Character 
{
     int health;//and more stuff that aren't important for the sake of this question
     //more code...
}

class Game 
{
     int size;
     vector<shared_ptr<Character>> board;
}

当我这样做时:

Game game1 = (53,...)//say that I gave proper values for game1 to be constructed.
Game game2 = game1;

game2 中的矢量是什么? game2 中的向量是否与 game1 中的向量具有相同的地址?还是地址不同但内容相同的vector?

此外,如果我的问题的答案是它们是相同的向量(意味着它们具有相同的地址),我怎样才能使它们彼此独立?我想要的是两个向量具有相同的内容但不同的地址!

如果有人对我所说的内容感到困惑:它是向量中的 shared_ptrs

game2 将包含 game1 中矢量的副本。它基本上会复制其所有 std::shared_ptr.

然而,std::shared_ptr 的副本仅意味着内部引用计数将增加,它指向的对象将与原始 std::shared_ptr 中的对象相同。

示例:

std::shared_ptr<Character> ptr1 = std::make_shared<Character>();
std::shared_ptr<Character> ptr2 = ptr1; // Copy of ptr1, however ptr2 points to same object as ptr1

编辑: 因此,std::vector 个地址将不同,这意味着 std::shared_ptr 个地址也将不同。只是,game1 和 game2 中的 Character 个对象将具有相同的地址。