gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:22:19 34 4
gpt4 key购买 nike

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

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com