問題タブ [reference-counting]
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.
delphi - Delphi: with-block の最後でインターフェイス参照が解放されなくなったのはいつからですか?
私は最近、私が書いたいくつかの非常に古いコードによって引き起こされた問題に出くわしました。これは明らかに、with
ステートメントで使用されているインターフェイス参照が -blockwith
を離れるとすぐに解放されると想定していました - 暗黙の -block のようなものですtry-finally
(C# のusing
-statementに似ています)。私が正しく理解していれば)。
どうやら (Delphi 2009 では) これは (もはや?) そうではありません。これがいつ起こったのか知っている人はいますか?それとも、私のコードはそもそも間違っていたのでしょうか?
明確にするために、簡単な例を次に示します。
誰かが古い「with
悪である」という議論を始めたときはいつでも、これは常に私が心に留めていた 1 つの例であり、「はい、でも...」と言い続けました。私が間違っていたようです...誰か確認できますか?
python - Python が False と True の参照カウントを維持するのはなぜですか?
hasattr 組み込み関数のソース コードを調べていたところ、興味をそそられた次の 2 行に気付きました。
グローバルな値ではPy_False
ありませんか? Py_True
まったくの好奇心から、Python がこれらの変数の参照カウントを保持しているのはなぜですか?
interface - COMオブジェクトをCOMインターフェイスにdynamic_castしても、参照カウントは増加しませんね。
COMインターフェイスIYおよびIZを実装するC++クラスXがあり、タイプXのオブジェクトのIYインターフェイスへのポインタyがある場合、次のようにします。
それはオブジェクトの参照カウントを上げませんね?それを説明するためにRelease()を実行する必要はありませんよね?
重要な場合は、ATL/COMを使用しています。
答えは「参照数を増やすことはなく、Release()をする必要もない」と推測していますが、確認したいと思います。
前もって感謝します。
.net - 管理対象オブジェクトの参照カウントを取得するにはどうすればよいですか?
.NET プロファイラーは、管理対象オブジェクトへの参照カウントを表示できます。彼らはどのようにそれらを数えますか?
python - Python: C++ オブジェクトをスクリプトに渡し、スクリプトから拡張 C++ 関数を呼び出す
まず問題は、プログラムが二重のメモリ解放で失敗することです...
取引は:私は持っています
それをスクリプトに渡します。それは正常に動作します。このような:
ここで、pFunc は python 関数です...つまり、私のスクリプトには obj を使用する関数があります。
もちろん、私はpythonクラスを定義しました
「Extend_module」は、関数「bar」を定義した拡張 C++ モジュールです。
「bar」機能が正常に動作することを期待していましたが、代わりにメモリエラーが発生しました:「メモリが2つ解放されているか破損しています」。
「バー」関数は次のとおりです。
「bar」の return ステートメントで失敗します...
objective-c - コード例:リリースした後もこのNSStringオブジェクトにアクセスできるのはなぜですか?
私はObjective-Cの理解を固めるためにいくつかの探索的コードを書いていましたが、私はこの例に出くわしましたが、私は完全には理解していません。このメソッドを定義し、コードを実行します。
コードを実行してこのメソッドを呼び出した後、いくつかのことに気付きました。
通常、保持カウントがゼロになった後に割り当てが解除されたと思われるものにアクセスしようとすると、EXC_BAD_ACCESSエラーが発生します。ここでは、代わりにmallocの「ダブルフリー」エラーが発生します。何故ですか?
コードに「[stringPointerrelease]」の行数を追加しても、NSLogは保持カウント1を報告します。リリースを追加すると、「ダブルフリー」エラーが増えるだけです。リリースステートメントが期待どおりに機能しないのはなぜですか?
stringPointerをオーバーリリースし、「ダブルフリー」エラーをたくさん受け取りましたが、戻り値は何も起こらなかったかのように機能します(戻り値を報告する別のNSLogがメインコードにあります)。プログラムは引き続き正常に実行されます。繰り返しますが、なぜこれが起こるのか誰かが説明できますか?
これらの例はかなり些細なことですが、私は何が起こっているのかを完全に把握しようとしています。ありがとう!
c++ - 演算子の削除をオーバーロードしますか、それとも猫を殺す方法ですか?
私はオーバーロード演算子deleteを試しています。これにより、スマートポインターを操作したくないユーザーにプレーンポインターを返すことができ、オブジェクトが削除されるタイミングを制御できます。
私は、いくつかの魂で構築され、何もしないオーバーロードされた演算子deleteと、魂の数を減らす(そして自慢する)デストラクタを持つクラスCatを定義します。魂が0に達すると、デストラクタはグローバル:: deleteを呼び出し、猫は死にます。
これは非常に単純に聞こえますが、期待どおりに機能しません。コードは次のとおりです。
これがメインです:
ループが9回実行された後、何か不快な(クラッシュ)が発生することを期待します。ただし、これは出力です。
最初の削除後に名前メンバーが破棄され、次の削除によってクラッシュが発生したようです。説明はありますか?Linuxでgccを使用してコンパイルしていますが、コンパイラのバグである可能性がありますか?
ところで、repotr()の代わりにcout << *pのようにoperator<<()を使用すると、それも奇妙でした。演算子<<()内からコンストラクターを呼び出す無限ループに入りました。何が起きてる?:)
ありがとう!
c++ - オブジェクトを参照するものを知る
参照カウントメカニズムを実装するオブジェクトがあります。それへの参照の数がゼロになると、オブジェクトは削除されます。
オブジェクトを使い終わっても、オブジェクトが削除されることはありません。これは、メモリの過剰使用につながります。私が持っているのはオブジェクトへの参照の数だけであり、適切なクリーンアップコードを記述できるように、オブジェクトを参照する場所を知りたいです。
ソースファイルでgrepを実行せずにこれを実現する方法はありますか?(それは非常に面倒です。)