使对象的向量彼此独立
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
个对象将具有相同的地址。
我有一个关于向量的问题,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
个对象将具有相同的地址。