問題タブ [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.

0 投票する
9 に答える
5911 参照

pointers - 弱ポインタ​​が役立つのはなぜですか?

プログラミング言語に含める機能を探してガベージコレクションを読んでいて、「弱いポインタ」に出くわしました。ここから:

弱ポインタ​​ーはポインターに似ていますが、弱ポインタ​​ーからの参照がガベージコレクションを妨げないこと、および弱ポインタ​​ーを使用する前に有効性をチェックする必要があることを除いて。

弱いポインタは、参照するメモリが実際にはまだ有効である可能性があるため、ガベージコレクタと相互作用しますが、弱いポインタが作成されたときとは異なるオブジェクトが含まれています。したがって、ガベージコレクターはメモリをリサイクルするたびに、それを参照する弱いポインターがあるかどうかを確認し、それらを無効としてマークする必要があります(これはこのような単純な方法で実装する必要はありません)。

弱いポインタについては今まで聞いたことがありません。私は自分の言語で多くの機能をサポートしたいと思っていますが、この場合、これが役立つケースを一生考えることはできません。弱いポインタを何に使うのでしょうか?

0 投票する
3 に答える
106 参照

.net - WeakReferenceには冗長なプロパティがありますか?

.NETのWeakReference実装には、IsAliveプロパティがあります。

1)プロパティを使用することと、プロパティがnullでないIsAliveかどうかをテストすることの間に、パフォーマンス/動作の違いはありますか?Target

2)IsAlive冗長なプロパティですか?

ありがとう。

0 投票する
2 に答える
936 参照

c++ - 弱いPtrでBoostPythonを使用していますか?

親子関係を使用してC++で依存関係を設定しようとしています。親には子が含まれ、子には親への弱いポインタがあります。

また、Pythonで親から派生できるようにしたいと思います。ただし、これを行うと、この親子関係を接続する弱いポインタエラーが発生します。

C ++コード:

Pythonバインディング:

Pythonコード:

エラー:

抽出された親へのポインターをshared_ptrに変換しようとすると、Pythonでfree()の無効なポインターエラーが発生します。

この問題を回避する方法はありますか、それともBoost Pythonで弱いポインターの使用をあきらめる必要がありますか?

0 投票する
4 に答える
8012 参照

c# - 弱参照はいつ使用する必要がありますか?

私は最近、WeakReferences を使用した Java コードに出くわしました。それらが導入されたときに出くわしたことはありましたが、それらが展開されているのを見たことはありませんでした。これは日常的に使用するものですか、それともメモリの問題が発生した場合にのみ使用する必要がありますか? 後者の場合、簡単に改造できますか、それともコードを大幅にリファクタリングする必要がありますか? 平均的な Java (または C#) プログラマーは一般的にそれらを無視できますか?

編集WR を過度に熱狂的に使用すると、何らかの損害が発生する可能性がありますか?

0 投票する
4 に答える
2550 参照

python - コールバックメソッドを保存する方法は?

私はいくつかのメソッドコールバックを保存しようとしていますが、それを参照するとバインドされたオブジェクトが存続するので、メソッドへのweakrefを保持しようとしましたが、それは不可能のようですか?

それで

  • なぜ私は弱い参照を維持できないのですか?メソッドへ(以下の例を参照)

  • メソッドrefを保持するための最良の方法は何ですか?標準ライブラリに何かありますか?または、関数とオブジェクトの参照を保持する必要があります。分ける?

例:

0 投票する
4 に答える
1730 参照

c# - WeakReference のスレッド セーフ

WeakReference を使用する場合、.IsAlive 呼び出しと .Target 呼び出しの間でターゲットが収集されていないことをどのように確認できますか?

例えば:

0 投票する
2 に答える
401 参照

java - Java: 通知プロバイダーの実装と hashCode 駆動型マップの比較

ジェネリックリスナーの通知束用に抽象ジェネリックプロバイダーを実装しました。E子孫はnotifyListener(E)特定の通知コードでオーバーライドする必要があります。リスナーのバッキング リストには、 を選択しますWeakHashMap<K,V>。リスナーは弱参照として保持する必要があります。

典型的な使用:

すべてがうまく機能しますが、AbstractListリスナーとして子孫クラスが必要な場合、バッキングWeakHashMapはリスナーインスタンスを 1 つしか受け入れません! 明らかです-メソッドhashCode()equals()リスナーはすべてのインスタンス(空のリスト)に対して同じ値を返すため、WeakHashMap.put以前に追加されたリスナーのみを置き換えます。

最善の解決策は何ですか?

  1. 別の非 hashCode バッキング コレクションを使用します -- しかしWeakHashMap、弱い参照を自動的に管理するので、私にとってはとても便利です。

  2. 単純な実装の抽象クラスなど、非汎用リスナーを使用しますequals() { return (this == object); }が、これはそれほど柔軟ではありません

  3. addListener(E)単純な equals() を使用してリスナーにラッパーを使用します -- ただし、このラッパーは弱い参照のために呼び出し元に対して透過的ではありません

別のアイデア?

0 投票する
4 に答える
27871 参照

java - JavaのWeakHashMapとキャッシング:値ではなくキーを参照するのはなぜですか?

JavaのWeakHashMapは、キャッシングに役立つとよく言われます。弱参照が値ではなくマップのキーに関して定義されているのは奇妙に思えます。つまり、それは私がキャッシュしたい値であり、キャッシュ以外の誰もがそれらを強く参照していない場合にガベージコレクションを取得したいのですよね?

キーへの弱参照を保持するのにどのように役立ちますか?を実行する場合はExpensiveObject o = weakHashMap.get("some_key")、呼び出し元が強力な参照を保持しなくなるまでキャッシュを「o」に保持する必要があり、文字列オブジェクト「some_key」についてはまったく気にしません。

私は何かが足りないのですか?

0 投票する
2 に答える
939 参照

.net - WeakReference.Target の GC 後に WeakReference に何が起こるか

WeakReference.Target によって参照されるターゲット オブジェクトがガベージ コレクションされると、WeakReference はどうなりますか? WeakRerence は存続し、存在し続けますか? 私が尋ねている理由は、リストに格納されている WeakReferences のリストがあるからです。実行時に、新しい WeakReferences が常にそのリストに追加されます。ターゲット オブジェクトが死んだら、放棄された WeakReference を自分でクリーンアップする必要がありますか? もしそうなら、これを行うための巧妙なトリックはありますか? WeakReference が放棄されたときに通知を受け取ることはできますか? または、そのリストを頻繁にループするタイマーを導入して、そのリストから WeakReference インスタンスを削除できるかどうかを確認する必要がありますか。

0 投票する
0 に答える
185 参照

visual-studio-2008 - WeakReference を使用して配列に VS2008 でカスタム デバッガー ビジュアライザーを実装する方法は?

標準の配列では希望どおりにデータが表示されないため、典型的な配列に対して vs2008 でカスタム デバッガー ビジュアライザーを実装したいと思います。ただし、Visual Studio では、セキュリティ上の理由から配列に対してこれを行うことはできません。WeakReferenceこの制限を回避するために a をラッパーオブジェクトとして使用することについて読んだことを覚えているようです。

手始めに、簡単なもの (C# コード) を示したいと思います。

上記は として表示され"10110"ます。

を使用してこれを行うにはどうすればよいWeakReferenceですか? これを行う別の方法はありますか?

bool 型のより長い配列については、WPF の Uniform Grid レイアウト コントロールを使用して、それらを 2 次元グリッドに表示すると便利です。