問題タブ [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.
c++ - プラグインでの静的ローカル変数の破棄
静的ローカル変数とクラスの静的メンバーに関するいくつかの質問を見ました。これの1つのコメントと、おそらく最も明確な1つのリンクから
C++ 入門書は次のように述べています。
各ローカル静的変数は、最初の実行がオブジェクトの定義を通過する前に初期化されます。関数が終了しても、ローカルの静的は破棄されません。プログラムが終了すると、それらは破棄されます。
しかし、上記の「プログラムの終了時」という記述は曖昧であることがわかりました。アプリケーションが終了するということですか?またはプラグインの場合、プラグインがアンロードされていることを意味しますか?
以前、Linux でリリース モードでコンパイルしたときにプラグインがアンロードされると、ローカルの静的変数が破棄されないことに気付きました。しかし、クラスメンバーに変更すると、プラグインのアンロード時に適切に破棄されます。クラス/ローカル静的変数は、プラグインでのみ使用されます。
誰でも説明できますか?
c++ - 破壊中の未定義の動作?
次のコードを考えてみましょう。
意図的に仮想デストラクタを定義しませんでした。コンパイラは UB の原因に関するメッセージを出力しましたが、それは本当ですか?
c++ - 特定のリソースが常に最初に削除されるようにするにはどうすればよいですか?
私のプロジェクトでは、イベントのシステムがあります。コールバックをイベントに接続すると、イベントが送信されるたびにコールバックが呼び出されます。
イベントに接続すると、トークンを取得します。トークンが破棄されない限り、接続はアクティブです。
ただし、次のシナリオで問題が発生します。
- クラスの解体
A
開始 - フィールド
dummy_instance
が破壊される - これでイベント発生
event_connection
まだ破棄されていないため、コールバックが呼び出されます- コールバックが割り当て解除されたメモリにアクセスしようとし、プログラムがクラッシュする
したがって、event_connection_token
コールバックが使用するクラス メンバーの前に常に破棄する必要があります。100 人の他のプログラマーにこのイベント コールバック システムを使用してもらいたい場合、event_connection_token
彼らがこれまでに作成したすべてのクラスで常に最初に割り当てを解除することを期待するのは専門家ではありません。最後に次の質問に行き着きます。
event_connection_token
クライアントクラスの他のものが破棄される前に、すべてのクライアントが削除されるようにするにはどうすればよいですか?
私はどちらかを探しています:
- プログラマーが考えなくてもトークンが常に最初に削除されるようにする巧妙な設計、または
- トークンが最初に削除されるようにコードを変更する必要があることをプログラマーに知らせるコンパイル時/実行時チェック。
編集:重複としてマークされた質問は、私の問題に対処していません。オブジェクトの破棄の順序を知っているか、デストラクタを明示的に呼び出すだけ.reset()
で問題が解決します。しかし、それは私の問題の解決策ではありません。問題は、プロジェクトのすべての開発者がこのルールを覚えていることに依存したくないことです (このイベント コールバック システムはコードの多くの場所で使用されるため)。
virtual-machine - 仮想マシンが実コンピュータにファイルを保存しないようにする方法
友人と私は、独自のバージョンの Windows Destruction を作成できるという考えを持っていました。ただし、実際のコンピューター自体がこれらのウイルスに感染しないようにする方法がわからないことを除いて. どうすればこれを行うことができますか?