Vala中函数和属性之间的区别

时间:2017-03-05 21:27:43

标签: properties vala

这里是Vala的新手......试图理解属性和getter / setter之间的区别。

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 ()是不是返回一个字符串,还是函数解决方案做了一些转换魔术?

谢谢!

1 个答案:

答案 0 :(得分:2)

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