問題タブ [destructor]
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 - C : 一度だけ呼び出される pthread データ固有のデストラクタ
マンページからpthread_key_create
:
オプションのデストラクタ関数を各キー値に関連付けることができます。スレッドの終了時に、キー値に NULL 以外のデストラクタ ポインタがあり、スレッドにキーに関連付けられた NULL 以外の値がある場合、ポイントされている関数は、現在関連付けられている値を唯一の引数として呼び出されます。スレッドの終了時に複数のデストラクタが存在する場合、デストラクタ呼び出しの順序は指定されていません。
関連するデストラクタを持つすべての非 NULL 値に対してすべてのデストラクタが呼び出された後、関連するデストラクタを持つ非 NULL 値がまだある場合は、プロセスが繰り返されます。未解決の非 NULL 値に対するデストラクタ呼び出しの少なくとも [PTHREAD_DESTRUCTOR_ITERATIONS] 回の反復の後、関連付けられたデストラクタにまだいくつかの非 NULL 値がある場合、実装はデストラクタの呼び出しを停止します。
NULL 以外のスレッド固有の値に対して "Hello World" を出力する単純なデストラクタを使用した小さな例を書きました。私が見る限り、このデストラクタは、デストラクタへの最初の呼び出しの後、スレッド固有の値がまだ NULL ではない場合でも、(少なくとも Linux の fedora と mac os x では) 1 回だけ呼び出されます。
私は何かを逃しましたか?(glibc では PTHREAD_DESTRUCTOR_ITERATIONS = 4)。
ここに私の小さな例があります:
c# - この非常に単純なシナリオで .net デストラクタが呼び出されないのはなぜですか?
私は次のコードを持っています:
Finalizer メソッドは GC.Collect の呼び出し時に呼び出されると思っていましたが、そうではありませんでした。
誰かが私に理由を説明できますか?
c# - .netデストラクタで「this」へのルート化された参照を再作成することは合法ですか?
.netに次のように書くことは合法ですか?
期待どおりに動作し、コンソールに「0」を書き込みますが、常に動作することが保証されているのではないかと思います。
誰かが舞台裏で何が起こっているのか知っていますか?
c# - C# デストラクタ (別名: ファイナライザ) に関連するコストは?
デストラクタは、オブジェクトが保持しているアンマネージ リソースのみを解放する必要があり、他のオブジェクトを参照するべきではありません。管理参照しかない場合は、デストラクタを実装する必要はありません (実装すべきではありません)。これは、管理されていないリソースを処理する場合にのみ必要です。デストラクタを使用するとコストがかかるため、管理されていない貴重なリソースを消費するメソッドにのみ実装する必要があります。
この記事ではこれについて詳しく説明していませんが、C# でデストラクタを使用すると、どのようなコストが発生するのでしょうか?
注: GC と、信頼できるタイミングでデストラクタが呼び出されないという事実については知っていますが、それ以外に何かありますか?
c++ - C++ の純粋仮想デストラクタ
次のように書くのは間違っていますか?
抽象基本クラスの?
少なくともそれは MSVC でコンパイルされます...実行時にクラッシュしますか?
c++ - デストラクタを非公開にすることの用途は何ですか?
デストラクタを非公開にすることの用途は何ですか?
c++ - デストラクタはスレッドセーフにする必要がありますか?
私はレガシーコードを調べていて、次のスニペットを見つけました:
万が一デストラクタをガードするのに役立つのだろうか?
シナリオを考えてみましょう:
実行順序が 1=>2 の場合は、機能する可能性があります。しかし、順序が逆になるとどうなるでしょうか?
それは設計上の問題ですか?
c++ - C++ でデストラクタとコンストラクタが呼び出される順序は何ですか?
C++ でデストラクタとコンストラクタが呼び出される順序は何ですか? いくつかの基本クラスと派生クラスの例を使用する
c++ - ベース仮想デストラクタを明示的に呼び出す必要がありますか?
C ++でクラスをオーバーライドする場合(仮想デストラクタを使用)、継承クラスに仮想としてデストラクタを再度実装していますが、ベースデストラクタを呼び出す必要がありますか?
もしそうなら、私はそれがこのようなものだと想像します...
私は正しいですか?