这里是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 ()
是不是返回一个字符串,还是函数解决方案做了一些转换魔术?
谢谢!
答案 0 :(得分:2)
通常,函数返回拥有的值(调用者必须释放),但属性getter返回无主值(调用者不能释放)。因此,get_context ()
返回的内存将被释放,并返回一个悬空指针。值属性返回需要由其他地方拥有的值(例如,在字段中)支持,或者更改要拥有的返回类型,以便Vala将复制该值。