移动、复制和 clone
C 程序员看赋值和传参,第一反应通常是“复制一份值”:
uint32_t a = 10;
uint32_t b = a;
结构体也可以按值复制:
struct Point p1 = {1, 2};
struct Point p2 = p1;
但一旦结构体里有指针,事情就变复杂:
struct Buffer {
uint8_t *data;
size_t len;
};
struct Buffer b2 = b1; // 只是复制指针和长度
这不是深拷贝。b1.data 和 b2.data 指向同一块内存。谁释放?能不能同时改?释放一个以后另一个还能不能用?C 里这些问题靠约定处理。