请问指针项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/