Valadoc 包含来自原始 GLib、GObject、Gtk+ 等库的文档。除此之外,它还包含额外的 Vala 特定文档。
您经常会看到仅在 C 编程语言的上下文中才有意义的句子。
Vala 编译器为你做内存管理(大部分时间)。在此示例string
中,Vala 编译器实际上将 Vala 翻译成gchar *
C 语言中的 a,必须在其中释放g_free
它,Vala 编译器也为您执行此操作。
事实上,字符串与对象有点不同,因为它们不是引用计数的,而是复制的。
以 Vala 为例:
int main () {
Object obj1 = new Object ();
Object obj2 = obj1;
string s1 = "";
string s2 = s1;
return 0;
}
valac 在 C 中生成的(手动清理的)代码如下所示:
int main (void) {
GObject* obj1 = g_object_new (G_TYPE_OBJECT, NULL);
GObject* obj2 = g_object_ref (obj1);
gchar* s1 = g_strdup ("");
gchar* s2 = g_strdup (s1);
g_free (s2);
g_free (s1);
g_object_unref (obj2);
g_object_unref (obj1);
return 0;
}
如您所见obj2
,这是对与 in 相同对象的引用,obj1
并且该对象仅在两个引用都被编辑时才被销毁unref
。
s2
另一侧的字符串是存储在其中的字符串的副本(s1
这又是字符串文字的副本""
)。
您还可以看到,编译器确实会为您处理这些细节。它使手动引用计数和手动字符串复制自动进行。