首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用C语言实现智能指针

用C语言实现智能指针
EN

Stack Overflow用户
提问于 2010-09-01 17:45:15
回答 3查看 5.5K关注 0票数 6

可能重复:

Smart pointers/safe memory management for C?

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

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

我正在寻找一个C语言只实现一个智能指针。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-01 17:51:22

是的,我认为这是不可能的(至少,不可能),因为@KennyTM这么说。智能指针是可能的,因为构造函数和析构函数被自动调用。否则,您将不得不自己调用reference()和unreference()。还有用吗?

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

票数 4
EN

Stack Overflow用户

发布于 2010-09-01 17:59:45

您可以构造一个完全封装的“不透明”类型,并按照在c++中所做的那样做您想做的事情。

就像这样。

智能机h:

代码语言:javascript
运行
复制
typedef struct sp smartpointer;

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

smartpointer.c

代码语言:javascript
运行
复制
/* contains the definition of "struct sp" and the implementation of the 
   the functions */

然后承诺,除非使用dereference,否则永远不会访问数据,但是编译器当然不会为您强制执行该操作。

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

票数 1
EN

Stack Overflow用户

发布于 2010-09-04 16:09:56

我倾向于认为聪明的指针为你做了(至少)两件事:

memory/object

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

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

但是第一项是C++及其对构造函数/析构函数的语言支持(RAII的核心)真正发光的地方。事实上,构造函数和析构函数是通过编译器自动插入的代码在正确的位置调用的,这使这种神奇的功能发挥了作用。如果没有内置的对CTORs &DTOR的语言支持,您将只需要近似于效果,或者在必要时依赖用户“做正确的事情”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3620744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档