使对象的向量彼此独立

making vectors of an object independent of each other

提问人:Saleh 提问时间:8/30/2021 最后编辑:Remy LebeauSaleh 更新时间:8/30/2021 访问量:99

问:

我有一个关于向量、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;

其中的向量是什么?中的向量是否与中的向量具有相同的地址?还是地址不同但内容相同的向量?game2game2game1

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

如果有人对我的意思感到困惑:这是向量内部的shared_ptrs

C++ C++11 Vector shared-ptr 复制构造函数

评论

0赞 Y.T. 8/30/2021
“game2 中的向量是什么?”试试吧?
2赞 Ruks 8/30/2021
Game game2 = game1;确实会创建一个副本,但由于是它所引用的地址的向量仍然保持不变,因此如果您尝试访问共享指针,您将访问相同的位置。首先,你为什么要使用,为什么不直接做呢?game1boardstd::shared_ptr<character>vector<shared_ptr<character>>vector<character>
1赞 StoryTeller - Unslander Monica 8/30/2021
我要冒昧地说,你问这个问题是因为你曾经作为“最佳实践”,然后看到这两款游戏相互影响。这反过来又让你想知道怎么会这样。对此的实际答案是,您不应该在这里使用,因为您似乎并不真正想在 .shared_ptrshared_ptrGame
0赞 Saleh 8/30/2021
@Ruks执行{vector<character>}实际上会导致一些问题,因为有一堆类继承自Character并向这些特定类添加一些内部值,因此我使用shared_ptr。
1赞 Saleh 8/30/2021
@StoryTeller-UnslanderMonica,我确实将shared_ptr作为最佳实践,如果由我个人决定,我实际上会使用unique_ptr,因为它更适合我的情况,但我被我的教授强迫使用shared_ptr :(。

答:

2赞 fredybotas 8/30/2021 #1

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

但是,仅表示的副本,内部引用计数将递增,它指向的对象将与原始对象相同。std::shared_ptrstd::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::vectorstd::shared_ptrCharacter

评论

0赞 Saleh 8/30/2021
我知道这样一个事实,我的问题是,游戏2中棋盘向量的地址是否与游戏1中棋盘向量的地址相同
0赞 fredybotas 8/30/2021
向量的地址会有所不同。只有 Character 对象具有相同的地址。