memory-leaks - 这个vala代码是内存泄漏吗?

标签 memory-leaks vala

根据 this

Vala doesn't have garbage collection. It does reference counting.

我不确定垃圾回收和引用计数之间的区别,也找不到明确的解释。 我是否明确需要删除 bmp 和/或向类 Bmp 添加析构函数? IOW:此代码是否存在内存泄漏?

public void* run() {
    while(true) {
        if(detected) {
            ...
            var bmp = new Bmp(800,800);
            ...

public class Bmp {
    ...

最佳答案

你写的代码不是内存泄漏,但是写一个是有可能的。例如:

   class Foo {
       Foo? f;
   }
   var foo1 = new Foo();
   var foo2 = new Foo();
   foo1.f = foo2;
   foo2.f = foo1;

每次分配 Foo 时,该实例的计数器都会在未分配时递增和递减。因为 foo1foo2 相互引用,所以它们的计数永远不会变为零,即使程序的其余部分没有对它们的引用。 unowned 关键字进行了不计入的引用。因此,悬空指针可以写成如下形式:

var foo = new Foo();
unowned Foo f = foo;
foo = null;
// f now refers to an object that has been deallocated.

如果你的对象图没有循环,就不会有问题。如果您有任何循环引用,如果您没有正确清理,您可能会泄漏内存。

关于memory-leaks - 这个vala代码是内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13161236/

相关文章:

c++ - 多态性中基类缺少虚拟析构函数 = 资源泄漏?

c# - GetOracleDecimal 内存泄漏

generics - Vala - 打印通用值

typedef - Vala 有 typedef 吗?

c - 在 Vala 中打印阿拉伯语文本

network-programming - 如何在 Vala 中接收 UDP 数据?

c++ - 内存泄漏定位

Python3 + ctypes回调在简单示例中导致内存泄漏

ios - subview UINavigationController 泄漏 ARC

string - 如何使用 vala/genie 获取今天的日期并将其转换为字符串?