Clone

1

移动、复制和 clone

4 分钟

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 里这些问题靠约定处理。

阅读更多