结构体的拷贝那些事儿

1、总结

​结构体的拷贝可以分为:浅拷贝、深拷贝、写时拷贝。

浅拷贝是指将内容直接赋给另一个,当结构体中出现了指针时,指针的拷贝是将原指针指向的地址赋予新指针,一旦通过原指针对地址进行其它操作,可能会使得新指针出现问题。(如通过原指针 free 内存,新指针变成野指针) C++ 和 C 的编译器默认使用浅拷贝,深拷贝需要程序员自己实现。 深拷贝是将内容拷贝过去,如同复制粘贴过去,包括指针也是拷贝内容过去。 写时拷贝,利用了引用计数,当我们 free 一个指针的内存时,只需要将其引用计数减一,就可以防止野指针;当我们想修改时,重新分配一份内存进行修改即可。

2、

结构体中嵌套了指针, 指针指向的内存, 如果需要 malloc 在堆内存中分配内存, 如果在该类型结构体变量之间互相赋值, 如果直接赋值, 就是浅拷贝; 如果赋值时, 重新为 指针变量在堆内存中重新申请内存, 拷贝数据, 就是深拷贝; ​浅拷贝只会拷贝指针变量的值, 不会拷贝指针变量指向的内存空间的数据;​

results matching ""

    No results matching ""