【发布时间】:2014-06-06 01:14:13
【问题描述】:
我正在尝试在 Vala 中使用字符串列表的 HashMap,但对象生命周期似乎对我不利。这是我当前的代码:
public class MyClass : CodeVisitor {
GLib.HashTable<string, GLib.List<string>> generic_classes = new GLib.HashTable<string, GLib.List<string>> (str_hash, str_equal);
public override void visit_data_type(DataType d) {
string c = ...
string s = ...
if (! this.generic_classes.contains(c)) {
this.generic_classes.insert(c, new GLib.List<string>());
}
unowned GLib.List<string> l = this.generic_classes.lookup(c);
bool is_dup = false;
foreach(unowned string ss in l) {
if (s == ss) {
is_dup = true;
}
}
if ( ! is_dup) {
l.append(s);
}
}
请注意,我正在将字符串值添加到与字符串键关联的列表中。如果列表不存在,我创建它。
假设我使用c 和s 的值相同 运行代码三次。基于一些 printf 调试,似乎只创建了一个列表,但每次它都是空的。我希望列表的大小为0,然后是1,然后是1。我在 Vala 内存管理/引用计数方面做错了吗?
【问题讨论】:
标签: vala