問題タブ [object-destruction]
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.
java - ファイナライザに「重大なパフォーマンス ペナルティ」があるのはなぜですか?
効果的な Java は次のように述べています。
ファイナライザーを使用すると、パフォーマンスが大幅に低下します。
ファイナライザーを使用してオブジェクトを破棄するのが遅いのはなぜですか?
visual-c++ - 静的CComPtr変数
アプリケーションに静的CComPtrメンバー変数を含めるのは悪い考えですか。静的変数の破棄を制御することはできず、CoUninitialzeの後に発生する可能性があるためです。
java - finalize() メソッドの上手な使い方
これは主に好奇心からです。
デバッグ/ロギング/プロファイリングの目的を除いて、誰かが Object.finalize() の適切な使用法に遭遇したかどうか、私はさまよっていましたか?
遭遇したことがない場合、良い使い方は何だと思いますか?
c++ - C++: デストラクタ カスケード中のコールバックとシステム タイマー イベント
オブジェクトが相互に呼び出し、しばらくすると、呼び出されたオブジェクトが開始オブジェクトをコールバックする OO 設計を想定します (呼び出しとコールバック)。通常のプログラムの終了時に、デストラクタが呼び出されている間、システム タイマーが呼び出されず、オブジェクトがコールバックを開始しないという約束はありますか?
c++ - C++のスマートポインタ
base
クラスとがありますderived
。それで:
そして今、スマートポインタクラスで上記のクラスを使用してこのコードがあるとしましょう:
derived
のデストラクタを呼び出すことでオブジェクトのスライスを防ぐことができると理解していderived
ますが、それをどのように知っているのでしょうか。スマートポインタに格納されている参照は、タイプの参照ではないでしょうbase*
か。ある種の階層ツリーをトラバースし、そのポインタをにキャストしてからderived*
、deleteを呼び出しますか?それとも私が知らないことが他にありますか?
実装はおそらくスレッドセーフで、邪魔にならず、参照カウントです。
はい、あなたが見るクラスは私がテストしているクラスに似ています。これらの与えられたクラスでこれを行う方法があるようです。上記の私の質問でどのように言及されているかについての主な考えは、そのような実装がどのように機能するかについてはわかりません。
c++ - 例外がスローされたときに静的オブジェクトは削除されますか、それともローカル オブジェクトだけですか?
例外がスローされると、スタックの巻き戻しプロセス中に、静的オブジェクトやヒープ オブジェクトではなく、ローカル オブジェクトのみが破棄されると思います。これが本当なら、クラス (テスト) デストラクタが呼び出される理由がわかりません。ありがとう。
delphi - Delphiでの仮想クラスの作成/破棄
これは私の最初の投稿ですが、ここに来て、すでに回答された質問の解決策を見つけることで、問題の解決策を何度も見つけたので、コミュニティに感謝したいと思います.
ということで、本題に入りたいと思います。私は Code Gear の Delphi 2007 IDE で作業しています。私はまだ Delphi での作業にかなり慣れていないため、正確には 3 か月も経っていないため、ここで基本的なものが欠落している可能性があるため、これを覚えておいてください。
最初に、問題を取り巻く状況を少し説明したいと思います。特定の時間にタスクを実行するためのスケジューリング ユーティリティを作成しています。使用可能なタスクごとに、そのタスクに関連付けられた 2 つの関連する Delphi フレームがあります。最初のフレームは、そのタスクに固有の詳細を編集するためのもので、2 番目のフレームは、タスクの実行時にランタイム情報を表示するためのものです。
実行中のタスクのリストが保持され、ユーティリティのスクロール ボックスに、ランタイム情報に対応するフレームのリストが表示されます。これらのランタイム フレームは、タスクの開始時と終了時に作成および破棄されます。それが私の問題につながります。
仮想クラス マネージャーを使用して、各タスクで使用可能な表示フレームと編集フレームのリストを保持し、必要に応じてオンザフライで作成します。実行時にすべてが適切に動作します。アプリケーションが実際に閉じられたときに、問題が発生しています。
プログラムは終了時に EAccessViolation 例外を発生させます。IDE を使用して問題を追跡しようとすると、問題に対応する行またはアクションが実際にはコードに存在しません。したがって、バックグラウンドで実行されているクリーンアップ機能の一部である必要があります。
仮想クラス フレームをオンザフライで作成するコードに絞り込みました。そのコードをコメント アウトすると問題なく終了するからです。したがって、このタイプのクラス作成の使用に関連するアクションを実行していないと私は信じています。
これは、仮想クラス マネージャーを使用してフレームを作成する方法の抜粋です。不要になったインスタンスを FreeAndNil で解放しています。アプリケーションを閉じる前にインスタンスを適切に解放したことを確認するために、できる限りトレースしましたが、明らかに何かが欠けています。
では、このようなものをデバッグするためにここからどこへ行くべきかについてのアイデアはありますか?
PS もう一度言いますが、私は新しいので、見逃したもの、見落としたもの、または追加するのを忘れたものがある場合はお知らせください。私の投稿を読んでくれてありがとう!
c++ - デストラクタは、これまでに構築されたことのないオブジェクトを呼び出します
私は次のコードを持っています。
以下は、このコードの実行ログです
私にとって最も奇妙なことは、デストラクタがコンストラクタよりも何度も呼び出されることです。さらに、これまでに構築されたことのないオブジェクトに対して、同じデータアドレスに対して呼び出されました。
どうしてそれができますか?
c++ - RVO vs std ::unique_ptr<>クリーンアップ
これは、オブジェクトの破棄と戻り値の最適化に関するC++の仕様に関する質問です。
クリーンアップの前にRVOが正しい値を返すことを期待できますstd::unique_ptr<>
か?
javascript - JavaScriptでWorkerオブジェクトを削除するには?
私の Web アプリでは、古い既存のオブジェクトに新しいスクリプトを渡す方法がないため、Worker オブジェクトを常に再インスタンス化する必要があります。しばらくすると、一部のブラウザーは新しい Worker オブジェクトの作成をブロックし始めます。これは、1 つのウィンドウの Worker の制限に達したためです。新しいワーカー オブジェクトを作成する前に、完成したワーカー オブジェクトを削除しようとしましたが、どうやらやり方が間違っているようです。Opera で失敗する簡単なテストを次に示します (ウィンドウあたりのワーカー数の上限は 256 です)。
私の質問は、ワーカー オブジェクトを完全に削除して、ブラウザーの制限に達することがないようにする方法です。ありがとうございました!