首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gee集合(libgee)是否计算对存储数据的引用?(Gee及其内存管理。)

Gee集合(libgee)是否计算对存储数据的引用?(Gee及其内存管理。)
EN

Stack Overflow用户
提问于 2022-10-05 12:46:43
回答 1查看 56关注 0票数 1
代码语言:javascript
复制
class ABC
{
    public int a;
    public int b;
    public int c;
}

Gee.HashMap<int, ABC> p;

void fn()
{
    p = new Gee.HashMap<int, ABC>();

    var x = new ABC();

    x.a = 3123;
    x.b = 1231;
    x.c = 5154;

    p.set(1, x);
}

这个密码有用吗?或者我的散列集合在x可见范围结束后丢失其数据,即当fn()返回时?

是否应该用指针替换引用x以防止出现这种情况?

应该在p.unset(1)方法之后显式删除这个指针吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-10-06 10:02:31

你的代码有效。xp里面还活着。吉容器使用参考计数。

但是,p对象从未被释放,因为它是一个全局变量。如果将它移动到一个更本地的范围(例如在一个主函数中),它的数据将被释放:

代码语言:javascript
复制
class ABC
{
    public int a;
    public int b;
    public int c;
}

Gee.HashMap<int, ABC> fn()
{
    var p = new Gee.HashMap<int, ABC>();

    var x = new ABC();

    x.a = 3123;
    x.b = 1231;
    x.c = 5154;

    p.set(1, x);
    return p;
}

void main() {
    Gee.HashMap<int, ABC> p = fn();
    stdout.printf("%d\n", p[1].a);
    // p and x are both freed here, because their ref count reaches 0
}

通常不需要unset,除非您希望手动从HashMap中删除该值。

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

https://stackoverflow.com/questions/73960572

复制
相关文章

相似问题

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