提问人:Saleh 提问时间:8/30/2021 最后编辑:Remy LebeauSaleh 更新时间:8/30/2021 访问量:99
使对象的向量彼此独立
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
此外,如果我的问题的答案是它们是相同的向量(意味着它们具有相同的地址),我怎样才能使它们彼此独立?我想要的是两个向量具有相同的内容但地址不同!
如果有人对我的意思感到困惑:这是向量内部的shared_ptrs
答:
2赞
fredybotas
8/30/2021
#1
game2 将包含 game1 中 vector 的副本。它基本上会复制它的所有.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
编辑:
因此,地址将不同,这意味着地址也将不同。只有 game1 和 game2 中的对象具有相同的地址。std::vector
std::shared_ptr
Character
评论
0赞
Saleh
8/30/2021
我知道这样一个事实,我的问题是,游戏2中棋盘向量的地址是否与游戏1中棋盘向量的地址相同
0赞
fredybotas
8/30/2021
向量的地址会有所不同。只有 Character 对象具有相同的地址。
评论
Game game2 = game1;
确实会创建一个副本,但由于是它所引用的地址的向量仍然保持不变,因此如果您尝试访问共享指针,您将访问相同的位置。首先,你为什么要使用,为什么不直接做呢?game1
board
std::shared_ptr<character>
vector<shared_ptr<character>>
vector<character>
shared_ptr
shared_ptr
Game