我有一个嵌入式应用程序,我在动态内存中分配一个对象并将其传递给其他模块。
我想创建一个指向此对象的智能指针。 C ++中有许多用于使用和实现智能指针的示例。
我正在寻找智能指针的C语言实现。
感谢。
答案 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,您只需要近似效果,或者在必要时依靠用户“做正确的事情”。