问题标签 [weak-references]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pointers - 为什么弱指针有用?
我一直在阅读垃圾收集,寻找包含在我的编程语言中的功能,我遇到了“弱指针”。从这里:
弱指针类似于指针,只是来自弱指针的引用不会阻止垃圾回收,并且弱指针在使用之前必须检查其有效性。
弱指针与垃圾收集器交互,因为它们引用的内存实际上可能仍然有效,但包含与创建弱指针时不同的对象。因此,每当垃圾收集器回收内存时,它必须检查是否有任何弱指针引用它,并将它们标记为无效(这不需要以如此幼稚的方式实现)。
我以前从未听说过弱指针。我想支持我的语言中的许多功能,但在这种情况下,我一生都无法想到一个有用的情况。一个人会使用弱指针做什么?
.net - WeakReference 是否具有冗余属性?
.NET 中的 WeakReference 实现具有 IsAlive 属性。
IsAlive
1) 使用该属性或测试该Target
属性是否不为空之间是否存在任何性能/行为差异?
2)IsAlive
是冗余属性吗?
谢谢。
c++ - 使用带有弱 Ptrs 的 Boost Python?
尝试在 C++ 中建立具有父子关系的依赖项。父级包含子级,子级有一个指向父级的弱指针。
我还希望能够从 Python 中的父级派生。但是,当我这样做时,连接此父子关系时出现弱指针错误。
C++ 代码:
Python绑定:
Python代码:
错误:
如果我尝试将提取的指向 Parent 的指针转换为 shared_ptr,我会在 Python 中得到一个 free() 无效指针错误。
有没有办法解决这个问题,或者我应该放弃在 Boost Python 中使用弱指针?
c# - 什么时候应该使用弱引用?
我最近遇到了一段带有 WeakReferences 的 Java 代码——虽然我在介绍它们时遇到过它们,但我从未见过它们部署。这是应该经常使用的东西还是只有在遇到内存问题时才应该使用?如果是后者,它们是否可以轻松改造,或者代码是否需要认真重构?一般的 Java(或 C#)程序员可以忽略它们吗?
编辑过度热情地使用 WR 会造成任何损害吗?
python - 如何存储回调方法?
我正在尝试存储一些方法回调,但引用它会使绑定的对象保持活动状态,所以我试图为方法保留一个弱引用,但这似乎不可能?
所以
为什么我不能保持弱参考。to 方法(见下面的例子)
保持方法参考的最佳方法是什么?标准库中有什么东西吗?否则我将不得不保留函数和对象引用。分离?
例子:
c# - 弱引用的线程安全
使用 WeakReference 时,我们如何确定在 .IsAlive 和 .Target 调用之间没有收集目标?
例如:
java - Java:通知提供者与 hashCode 驱动的 Map 的实现
我已经为一组通用侦听器实现了抽象通用提供程序E
,后代必须notifyListener(E)
用特定的通知代码覆盖。对于我选择的听众后备名单WeakHashMap<K,V>
。侦听器必须作为弱引用:
典型用途:
一切正常,但是当我需要AbstractList
后代类作为侦听器时,支持WeakHashMap
只接受一个侦听器实例!很明显——方法hashCode()
和equals()
监听器为所有实例(空列表)返回相同的值,所以WeakHashMap.put
只替换以前添加的监听器。
什么是最好的解决方案?
使用另一个非 hashCode 支持集合——但
WeakHashMap
对我来说太棒了,因为自动为我管理弱引用使用非通用监听器,例如具有简单
equals() { return (this == object); }
实现的抽象类——但这不是那么灵活addListener(E)
使用简单的 equals() 为侦听器使用一些包装器——但由于弱引用,此包装器对调用者不能透明
另一个想法?
java - Java 的 WeakHashMap 和缓存:为什么它引用键而不是值?
Java 的WeakHashMap通常被认为对缓存很有用。虽然它的弱引用是根据映射的键而不是它的值来定义的,但这似乎很奇怪。我的意思是,这是我想要缓存的值,一旦除了缓存之外没有其他人强烈引用它们,我想要收集垃圾,不是吗?
以何种方式有助于保持对键的弱引用?如果您执行 a ExpensiveObject o = weakHashMap.get("some_key")
,那么我希望缓存保持 'o' 直到调用者不再持有强引用,并且我根本不关心字符串对象“some_key”。
我错过了什么吗?
.net - WeakReference.Target GC 后 WeakReference 会发生什么
当 WeakReference.Target 引用的目标对象被垃圾回收时,WeakReference 会发生什么?WeakRerence 是否保持活力并保持存在?我问的原因是我有一个存储在列表中的弱引用列表。在运行时,新的 WeakReferences 不断被添加到该列表中。现在当目标对象死亡时,我必须自己清理废弃的 WeakReference 吗?如果是这样,是否有一个聪明的技巧可以做到这一点?当 WeakReference 被放弃时,我可以收到通知吗?或者我是否必须引入一个经常循环遍历该列表的计时器,以查看是否可以从该列表中删除任何 WeakReference 实例。
visual-studio-2008 - 如何在 VS2008 中使用 WeakReference 在数组上实现自定义调试器可视化器?
我想在 vs2008 中为一个典型的数组实现一个自定义调试器可视化器,因为标准数组不会像我想要的那样显示数据。但是,出于安全原因,Visual Studio 会阻止对数组执行此操作。我似乎记得虽然阅读了有关使用 aWeakReference
作为包装器对象来解决此限制的信息。
因此,对于初学者,我想展示一些简单的东西(C# 代码):
以上显示为"10110"
.
我怎么能这样做WeakReference
呢?还有另一种方法可以做到这一点吗?
对于更长的布尔类型数组,使用 WPF 中的统一网格布局控件将它们显示在二维网格中会很有用。