(1) 弱引用之间有什么区别,比如
weak SomeType weak_ref = hard_ref;
或
unowned SomeType unowned_ref = hard_ref;
一方面和原始指针一样
SomeType* raw_ptr = hard_ref;
另一方面,从实际角度来看?
首先,我认为弱引用会自动重置为null
,就像在Java中一样,但它们显然不会。文档仅比较弱引用和硬引用,但它们没有提到原始指针。我错过了什么吗?
(2)此外:
null
?WeakHashMap
或者Vala中可用的Collections.newSetFromMap
函数的类的对应项?答案 0 :(得分:3)
弱引用和原始指针之间几乎没有区别:
delete
,但不能在弱引用上调用。Foo**
,但是没有相应的引用。您可以创建一个弱指针集合(例如,ArrayList<unowned FileStream>
)。 Java的WeakHashMap
基于垃圾收集器,Vala中没有垃圾收集器。参考文献超出范围并确定性地进行清理,而不是作为记忆压力的结果。
听起来你想要的是C ++的std::weak_ptr
。 Vala有WeakRef
,类似。 WeakRef
可以保存一个可能处理的指针,并返回对它的强引用或请求时为null。它仅适用于派生自GLib.Object
的类。与C ++版本不同,遗憾的是它不是静态类型安全的(尽管它是运行时类型安全的)。
答案 1 :(得分:0)
我目前的理解是: