【发布时间】:2021-02-11 15:51:55
【问题描述】:
我需要在我的项目中进行深层复制,现在我将 memcpy srcObj 转换为 destObj 然后
如果destObj 拥有指针成员,我只需创建所有 obj 并递归执行此方法
这是伪代码:
class B
{
public:
B(int id_) : id(id_) {};
int id = 0;
};
class A
{
public:
vector<B*> vecInt;
B objB = 111;
A()
{
vecInt.push_back(new B(1));
vecInt.push_back(new B(2));
vecInt.push_back(new B(3));
}
A(const A& rhs)
{
memcpy(this, &rhs, sizeof(A));
for (auto i = 0; i < rhs.vecInt.size(); i++)
{
auto ptrTmp = new B(rhs.vecInt[i]->id);
cout << "00000000000 " << rhs.vecInt[i] << endl;;
this->vecInt[i] = ptrTmp;
cout << "11111111111 " << ptrTmp << endl;;
cout << "22222222222 " << rhs.vecInt[i] << endl;;
}
}
};
这就是问题所在,每次我在循环中分配this->vecInt[i] 时,rhs.vecInt[i] 也会发生变化,它们都指向一个地址,我不知道为什么会这样。
感谢任何帮助。
【问题讨论】:
-
memcpy导致未定义的行为。memcpy在 C++ 中有效的情况很少。
标签: c++ vector copy copy-constructor deep-copy