我有一个结构定义,我需要控制的赋值运算符。这里是一些例子的代码,不工作,我想要的。
struct jsonobject {
struct jsonobject* children[100];
};
int main(int argc, const char * argv[]) {
struct jsonobject obj;
struct jsonobject obj2;
obj2 = obj; // Problem is here.
return 0;
}
问题是obj2 = obj
行执行了obj
的浅拷贝,而我需要它来执行深拷贝,我应该如何处理这种情况呢?
2条答案
按热度按时间neekobn81#
memcpy(&obj2, &obj, sizeof obj)
与本例中的obj2 = obj
类似,创建了一个浅副本(如果对象包含指针,则复制这些指针,而不是复制它们指向的任何对象)。JSON库附带了合适的函数,通常还有一种通过引用计数共享数据的机制。
5anewei62#
您可以编写自己的函数来递归执行深度复制。下面是使用
malloc
为复制分配内存的演示:出于演示的目的,我将
MAX_CHILDREN
从100
简化为5
。对于问题中的代码,您希望MAX_CHILDREN
的值为100
。此演示程序具有以下输出:
如您所见,源数据的结构已成功复制。此外,复制数据的子级地址与源数据的子级地址不同。这证明执行的是深层复制,而不是浅层复制。