c - C 中的所有权约定

标签 c ownership

<分区>

假设我想使用包含这两个 header 的库:

// types.h
typedef const char* Value;
typedef const char* Key;

// map.h
/** The given name and value will be copied into the map */
void add(struct Map* m, Key key, Value value);

我假设注释意味着 char*keyvalue 的内容将被 复制add 函数,返回后不保存指针以供使用。这意味着调用函数可以用这些指针做任何它想做的事情,比如释放 keyvalue,在调用 add 之后。

调用函数还可以期望add 不会修改keyvalue

现在,如果该评论不存在并且既没有实现源也没有使用示例,那么对于这些​​所有权问题,经验丰富的 C 程序员会怎么想?

最佳答案

首先也是最重要的是尝试获取文档。除非 API 记录了行为,否则不能 100% 确定。如果所有尝试都失败了,那么可以合理地假设:

  1. 函数不会修改 KeyValue,因为它们作为 const 传递。
  2. 除非明确提及,否则调用者保留传递给函数的变量的所有权,并且可以在函数调用后使用传递的 KeyValue 做任何他们想做的事情。

另外,应该通过严格的测试来确认假设。

关于c - C 中的所有权约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14391856/

相关文章:

c - 释放 malloc 指针时出错

最终赋值的 C 循环优化帮助(禁用编译器优化)

vector - 可以从迭代器中收集 &mut 吗?

rust - 调用返回引用的函数时了解非词法生命周期

c - 使用 typedef 枚举值而不进行初始化

c++ - GCC -fstack-check 选项在 C 中引发了什么异常

c - 我对 read() 和 write() 做错了什么?

rust - Rust不能在hashmap中插入不同的结构

linux - mac OS X 和 linux 之间的 rsync 所有权

rust - 闭合体的生命周期与传递给它的值之间不匹配