在C中进行结构的深层副本的最简单方法是什么



假设我有

struct A{
char *name;
unsigned long *trunks;
bool value;
const struct smap *smap;
...
...
}

该结构具有所有类型的数据结构,除了结构A*之外,我没有直接暴露于结构的直接接触。

您必须以相同的方式(递归)将结构中的每个元素和所有引用对象复制到新分配的结构。

如果结构只有很少的指针,则可以使用memcpy将所有元素首先复制,然后在第二次通过中复制所有引用(通过指针)对象。如果指针很多,则可以手工复制每个字段可能更有效。

参考物体必须相同处理(通过递归,迭代将非常讨厌)。但是,为此,您需要知道这些类型的结构。另外,可能会在其植入文件中为所有这些对象都有复制功能,从而使它们保持不透明。如果没有结构和复制功能可用,那么您就会有些丢失,因为没有任何方法可以检测指针。

如果有循环引用,将会出现问题。然后事情变得更加复杂。

最新更新