【发布时间】:2015-05-10 21:06:20
【问题描述】:
我正在尝试将某些项目从一个向量复制到另一个包含 shared_ptr 对象的向量中。
我不想要一个引用,而是将该对象的唯一副本放置到另一个向量中。 这样做的重点是用游戏对象填充 listEnvironmentStatic,当游戏地图开始时,所有内容都被复制到 listEnvironment 以进行模拟,当玩家想要重置地图时,listEnvironment 再次从 listEnvironmentStatic 复制所有内容,每个对象都回到它的原来的位置。
this->listEnvironment.insert(this->listEnvironment.end(), this->listEnvironmentStatic.begin(), this->listEnvironmentStatic.end());
使用 std::copy 和调整第二个向量的大小也不起作用。
看下面的例子:
std::vector<std::shared_ptr<Environment>> listEnvironmentStatic;
std::vector<std::shared_ptr<Environment>> listEnvironment;
现在假设我在 listEnvironmentStatic 中有几个项目我想复制到 listEnvironment(它始终包含至少 1 个对象),我将如何进行唯一复制并仍然保留 listEnvironmentStatic 以防玩家想要重新启动再来一张地图?
【问题讨论】:
-
我认为你不应该在像
vectors这样的容器中使用shared_ptr。例如,请参阅 Is using std::vector< std::shared_ptr<const T> > an antipattern? 和 shared_ptr with vector。 -
您要追加到
listEnviroment还是替换其中的所有内容? -
如果list2总是包含一个对象,为什么它是一个向量?
-
“整个想法是将游戏地图重置回原点。”除非你解释清楚,否则这毫无意义。
-
你的问题很难理解。如果您有一个
shared_ptr<A> a = ...;并且想要复制一个A的新实例,请使用auto b = std::make_shared< A >( *a );(或将元素从向量“复制”到向量时的等效项)。
标签: c++