問題タブ [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プロパティがあります。
1)プロパティを使用することと、プロパティがnullでないIsAlive
かどうかをテストすることの間に、パフォーマンス/動作の違いはありますか?Target
2)IsAlive
冗長なプロパティですか?
ありがとう。
c++ - 弱いPtrでBoostPythonを使用していますか?
親子関係を使用してC++で依存関係を設定しようとしています。親には子が含まれ、子には親への弱いポインタがあります。
また、Pythonで親から派生できるようにしたいと思います。ただし、これを行うと、この親子関係を接続する弱いポインタエラーが発生します。
C ++コード:
Pythonバインディング:
Pythonコード:
エラー:
抽出された親へのポインターをshared_ptrに変換しようとすると、Pythonでfree()の無効なポインターエラーが発生します。
この問題を回避する方法はありますか、それともBoost Pythonで弱いポインターの使用をあきらめる必要がありますか?
c# - 弱参照はいつ使用する必要がありますか?
私は最近、WeakReferences を使用した Java コードに出くわしました。それらが導入されたときに出くわしたことはありましたが、それらが展開されているのを見たことはありませんでした。これは日常的に使用するものですか、それともメモリの問題が発生した場合にのみ使用する必要がありますか? 後者の場合、簡単に改造できますか、それともコードを大幅にリファクタリングする必要がありますか? 平均的な Java (または C#) プログラマーは一般的にそれらを無視できますか?
編集WR を過度に熱狂的に使用すると、何らかの損害が発生する可能性がありますか?
python - コールバックメソッドを保存する方法は?
私はいくつかのメソッドコールバックを保存しようとしていますが、それを参照するとバインドされたオブジェクトが存続するので、メソッドへのweakrefを保持しようとしましたが、それは不可能のようですか?
それで
なぜ私は弱い参照を維持できないのですか?メソッドへ(以下の例を参照)
メソッドrefを保持するための最良の方法は何ですか?標準ライブラリに何かありますか?または、関数とオブジェクトの参照を保持する必要があります。分ける?
例:
c# - WeakReference のスレッド セーフ
WeakReference を使用する場合、.IsAlive 呼び出しと .Target 呼び出しの間でターゲットが収集されていないことをどのように確認できますか?
例えば:
java - Java: 通知プロバイダーの実装と hashCode 駆動型マップの比較
ジェネリックリスナーの通知束用に抽象ジェネリックプロバイダーを実装しました。E
子孫はnotifyListener(E)
特定の通知コードでオーバーライドする必要があります。リスナーのバッキング リストには、 を選択しますWeakHashMap<K,V>
。リスナーは弱参照として保持する必要があります。
典型的な使用:
すべてがうまく機能しますが、AbstractList
リスナーとして子孫クラスが必要な場合、バッキングWeakHashMap
はリスナーインスタンスを 1 つしか受け入れません! 明らかです-メソッドhashCode()
とequals()
リスナーはすべてのインスタンス(空のリスト)に対して同じ値を返すため、WeakHashMap.put
以前に追加されたリスナーのみを置き換えます。
最善の解決策は何ですか?
別の非 hashCode バッキング コレクションを使用します -- しかし
WeakHashMap
、弱い参照を自動的に管理するので、私にとってはとても便利です。単純な実装の抽象クラスなど、非汎用リスナーを使用します
equals() { return (this == object); }
が、これはそれほど柔軟ではありませんaddListener(E)
単純な equals() を使用してリスナーにラッパーを使用します -- ただし、このラッパーは弱い参照のために呼び出し元に対して透過的ではありません
別のアイデア?
java - JavaのWeakHashMapとキャッシング:値ではなくキーを参照するのはなぜですか?
JavaのWeakHashMapは、キャッシングに役立つとよく言われます。弱参照が値ではなくマップのキーに関して定義されているのは奇妙に思えます。つまり、それは私がキャッシュしたい値であり、キャッシュ以外の誰もがそれらを強く参照していない場合にガベージコレクションを取得したいのですよね?
キーへの弱参照を保持するのにどのように役立ちますか?を実行する場合はExpensiveObject o = weakHashMap.get("some_key")
、呼び出し元が強力な参照を保持しなくなるまでキャッシュを「o」に保持する必要があり、文字列オブジェクト「some_key」についてはまったく気にしません。
私は何かが足りないのですか?
.net - WeakReference.Target の GC 後に WeakReference に何が起こるか
WeakReference.Target によって参照されるターゲット オブジェクトがガベージ コレクションされると、WeakReference はどうなりますか? WeakRerence は存続し、存在し続けますか? 私が尋ねている理由は、リストに格納されている WeakReferences のリストがあるからです。実行時に、新しい WeakReferences が常にそのリストに追加されます。ターゲット オブジェクトが死んだら、放棄された WeakReference を自分でクリーンアップする必要がありますか? もしそうなら、これを行うための巧妙なトリックはありますか? WeakReference が放棄されたときに通知を受け取ることはできますか? または、そのリストを頻繁にループするタイマーを導入して、そのリストから WeakReference インスタンスを削除できるかどうかを確認する必要がありますか。
visual-studio-2008 - WeakReference を使用して配列に VS2008 でカスタム デバッガー ビジュアライザーを実装する方法は?
標準の配列では希望どおりにデータが表示されないため、典型的な配列に対して vs2008 でカスタム デバッガー ビジュアライザーを実装したいと思います。ただし、Visual Studio では、セキュリティ上の理由から配列に対してこれを行うことはできません。WeakReference
この制限を回避するために a をラッパーオブジェクトとして使用することについて読んだことを覚えているようです。
手始めに、簡単なもの (C# コード) を示したいと思います。
上記は として表示され"10110"
ます。
を使用してこれを行うにはどうすればよいWeakReference
ですか? これを行う別の方法はありますか?
bool 型のより長い配列については、WPF の Uniform Grid レイアウト コントロールを使用して、それらを 2 次元グリッドに表示すると便利です。