Vala 中函数和属性的区别

Difference between functions and properties in Vala

这里是 Vala 的新手...试图了解属性和 getters/setters 之间的区别。

public class Person {
  public string name {
    get {
      XPath.NodeSet* nodes = search (node, "/name");
      return nodes->item (0)->get_content (); 
    }
  }

  public string get_name() {
    XPath.NodeSet* nodes = search (node, "/name");
    return nodes->item (0)->get_content (); 
  }
}

第二个 get_name () 函数按预期工作。 属性 没有。它抛出:

Return value transfers ownership but function return type hasn't been declared to transfer ownership
      return nodes->item (0)->get_content (); 
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我在这里错过了什么? get_content () 没有返回字符串还是函数解决方案执行了一些转换魔术?

谢谢!

通常,函数 return 拥有值(调用者必须释放),但是 属性 getter return 未拥有的值(调用者不能释放)。因此,由 get_context () 编辑的内存 return 将被释放,并且悬空指针 return 编辑。值属性 return 需要由其他地方拥有的值支持( 例如 ,在字段中)或更改要拥有的 return 类型,以便 Vala将复制该值。