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

jac*_*nad 2 memory-leaks vala

根据这个

Vala没有垃圾收集.它确实引用计数.

我不确定垃圾收集和引用计数之间的区别是什么,我也找不到清楚的解释.我是否明确需要删除bmp和/或向Bmp类添加析构函数?IOW:这段代码是否有内存泄漏?

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

public class Bmp {
    ...
Run Code Online (Sandbox Code Playgroud)

apm*_*ell 6

您编写的代码不是内存泄漏,但可以编写一个代码.例如:

   class Foo {
       Foo? f;
   }
   var foo1 = new Foo();
   var foo2 = new Foo();
   foo1.f = foo2;
   foo2.f = foo1;
Run Code Online (Sandbox Code Playgroud)

每次Foo分配a时,该实例的计数器在未分配时递增和递减.因为foo1并且foo2相互引用,所以即使在程序的其余部分中没有引用它们,它们的计数也永远不会为零.的unowned关键字使得其不计算的参考.因此,悬挂指针可以写成如下:

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

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