gpt4 book ai didi

c - 引用计数如何工作?

转载 作者:行者123 更新时间:2023-12-04 18:13:41 26 4
gpt4 key购买 nike

引用计数结构如何工作?例如让我们看一下SDL_Surface :

typedef struct SDL_Surface
{
...
int refcount;
} SDL_Surface;

s = SDL_CreateRGBSurface(...); // <-- what happens here?
SDL_FreeSurface(s); // <-- and here?

如何在自己的代码中实现引用计数?

最佳答案

SDL_CreateRGBSurface将分配 SDL_Surface 的新实例(或合适的派生结构),并增加引用计数(将其设置为 1)。
SDL_FreeSurface将减少引用计数,并检查它是否为零。如果是,则意味着没有其他对象正在使用该表面,它将被释放。

SDL 还保证每当对象在其他地方(例如在渲染器中)使用时,引用计数就会增加。因此,如果在 SDL_FreeSurface 时引用计数不为零被调用,那么其他一些对象必须正在使用它。另一个对象最终也会调用 SDL_FreeSurface并永久释放表面。

引用计数允许您廉价地跟踪对象,而无需循环收集垃圾收集器的开销。然而,一个缺点是它不能处理循环(例如,对象 A 持有对 B 的引用,而 B 又持有对 B 的引用);在这些情况下,即使所有其他外部引用都消失了,循环也会使所涉及的对象保持事件状态。

要实现引用计数,您只需向要引用计数的任何对象添加一个引用计数字段,并确保(在您的公共(public) API 和内部)对象的每次分配和释放都通过适当的引用计数维护接口(interface)(您必须定义)。最后,当一个对象或函数想要引用您的引用计数的对象时,它们必须首先通过增加引用计数(直接或通过某些接口(interface))来获取引用。完成后,他们必须减少引用计数。

关于c - 引用计数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com