c++ - 与带有指针项的 vector 拷贝相关的问题

标签 c++ copy depth

请问指针项vector的copy是否有问题。我是否需要 strcpy 或 memcpy 因为可能存在深度复制问题?

例如:

Class B;

Class A

{
   ....

private:
   std::vector<B*> bvec;

public:

   void setB(std::vector<B*>& value)

   {

      this->bvec = value;

   }

};

void main()

{

   ....

   std::vector<const B*> value; // and already has values

   A a;

   a.setB(value);

}

这个例子只给A类中的类变量bvec赋值。我是否需要使用 memcpy,因为我发现 std::vector bvec;有指针项?我对 C++ 中的深度复制感到困惑,你能解释清楚吗?谢谢。

最佳答案

想一想,如果您在调用 setB 之后从 vector value 中移除和删除一个项目,那么 中的 vector >A 将有一个不再有效的指针。

所以要么你需要做一个“深拷贝”,保证上面的场景永远不会发生,要么使用像std::shared_ptr这样的共享智能指针。而不是原始指针。如果您需要指点,我会推荐最后一个。

还有另一种选择,那就是将 vector 存储在 A 中作为对实际 vector 的引用。然而,这还有其他问题,比如真实 vector 需要在对象的整个生命周期内有效。但在这里您也可以使用智能指针,并动态分配 vector 。

关于c++ - 与带有指针项的 vector 拷贝相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11963897/

相关文章:

c++ - 我对 "Rotten Oranges"问题的解决方案给出了错误的输出。我已经使用 BFS 实现了它

c++ - 使用 #ifdefs 和 #define 可选择将函数调用转换为注释

c++ - 为什么 const 在 C++ 中暗示内部链接,而在 C 中却没有?

循环中的 VBA 复制和粘贴

opengl - 如何写入 OpenGL 深度缓冲区

c++ - OpenCV imwrite保存完整的黑色jpeg

c++ - 将任何类型的参数附加到事件

Maven (Surefire) : copy test resources from src/test/java

javascript - 复制节点集合、处理它们然后序列化的有效方法?

actionscript-3 - 大物体的等距深度排序问题