C中的智能指针实现

时间:2010-09-01 17:45:16

标签: c pointers smart-pointers c99

  

可能重复:
  Smart pointers/safe memory management for C?

我有一个嵌入式应用程序,我在动态内存中分配一个对象并将其传递给其他模块。

我想创建一个指向此对象的智能指针。 C ++中有许多用于使用和实现智能指针的示例。

我正在寻找智能指针的C语言实现。

感谢。

3 个答案:

答案 0 :(得分:3)

是的,我认为由于@KennyTM的说法,这是不可能的(或者至少不是那么有用)。智能指针是可能的,因为自动调用构造函数和析构函数。否则你必须自己调用reference()和unreference()。还有用吗?

另外,请参阅此前非常相关的SO问题:Smart pointers/safe memory management for C?

答案 1 :(得分:1)

您可以构建一个完全封装的“opaque”类型,并按照您在c ++中的方式执行所需的操作。

喜欢这个。

smartpointer.h:

typedef struct sp smartpointer;

smartpointer new(void *content, size_t s);
int          delete(smartpointer p)
void*        dereference(smartpointer p);
/* ... */

smartpointer.c

/* contains the definition of "struct sp" and the implementation of the 
   the functions */

然后承诺,除了使用dereference之外,永远不会访问数据,但当然编译器不会强制执行此操作。

所以,这很麻烦,你应该仔细考虑你可能会得到什么。

答案 2 :(得分:0)

我倾向于将智能指针视为(至少)为你做两件事:

  • 自动管理内存/对象的 生命周期 (资源分配)
  • 自动管理对象的 所有权 (复制语义等)

第二个方面可以近似通过实现一个强大的API,不允许人们直接复制/分配指针。

但是第一项是C ++及其对构造函数/析构函数(RAII的核心)的语言支持真正发挥作用的地方。这是构造函数&析构函数通过编译器自动插入的代码在正确的位置被调用,这使得魔法工作。没有内置语言支持CTOR& DTOR,您只需要近似效果,或者在必要时依靠用户“做正确的事情”。