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

0 投票する
11 に答える
281607 参照

c++ - サブクラスへのポインタを削除すると、基本クラスのデストラクタが呼び出されますか?

class Aフィールドの 1 つにヒープ メモリ割り当てを使用する があります。クラス A はインスタンス化され、ポインタ フィールドとして別のクラスに格納されます ( class B.

クラス B のオブジェクトを使い終わったら、 を呼び出しますdelete。これは、デストラクタを呼び出すと想定しています...しかし、これはクラス A のデストラクタも呼び出すのでしょうか?

編集:

答えから、私はそれを取ります(間違っている場合は編集してください):

  1. deleteB のインスタンスの呼び出し B::~B();
  2. 呼び出すA::~A();
  3. A::~A deleteA オブジェクトのすべてのヒープ割り当てメンバー変数を明示的に指定する必要があります。
  4. 最後に、クラス B のインスタンスを格納しているメモリ ブロックがヒープに返されます。new使用されると、最初にメモリ ブロックがヒープに割り当てられ、次にコンストラクタが呼び出されて初期化され、すべてのデストラクタが呼び出されてオブジェクトがファイナライズされます。オブジェクトが存在したブロックはヒープに戻されます。
0 投票する
4 に答える
293 参照

c# - 静的インスタンス、デストラクターが呼び出されない

以下のコードを参照してください。デストラクタは呼び出されません。これを修正できる理由と方法を知っている人はいますか?

0 投票する
6 に答える
1043 参照

exception - 面接の質問に対する受け入れ可能な回答

次の質問に対して、あなたはどのような答えを受け入れますか

「コンストラクタおよびデストラクタから例外をスローするプロセスおよび/または落とし穴を説明する」(C++/C#/java)

これらの言語のいずれかで数年の経験があると主張する候補者にとって、これについてどの程度の知識が不可欠であると考えますか (彼がこれを逃した場合、あなたはほぼ確実に彼を望まないでしょう)。

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

c++ - コンストラクタ/デストラクタ定義に関連する c++ コンパイル エラー

クラスのコンストラクタとデストラクタを定義しようとしていますが、エラーが発生し続けます:

暗黙的に宣言された 'x::x()' の定義

どういう意味ですか?

コードの一部:

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

java - Javaで開いているプロセスをクリーンアップするにはどうすればよいですか?

Java プログラムからプロセスを開始しています。私はそれを保持し、プログラムの後の時点で、いくつかのシグナルを送信して (UNIX シグナルの場合とは異なり、別のメカニズム)、それ自体をクリーンアップしてシャットダウンするように指示します。これは、このプロセスを終了する適切な方法です。後で再起動してプロセスを保持し、任意の回数再び停止する可能性があります。

プログラムが存在する場合は、プロセスに終了するように通知し、存在することを確認したいと思います。それ以外の場合、Java はプロセスを非同期で開始するため、プログラムが終了した後も Java は存続し、実行を続けます。

Process変数を含むオブジェクトのデストラクタでやろうと思ったのですが、Javaにはデストラクタがないようです。JNI を介して割り当てられたメモリを解放するための finalize() メソッドがありますが、これはそのような場合ではなく、どうやら finalize() が呼び出されることを保証できないようです: オブジェクトがガベージ コレクションされたときにのみ呼び出され、プログラムは、ガベージ コレクションを呼び出さずに終了まで実行される可能性があります。この場合、すべてが一度に解放され、ガベージ コレクションも finalize() も発生しません。

プログラムが終了したときに、このクリーンアップ コードが最初に呼び出されるようにする最善の方法は何ですか?

Java 1.6 で Runtime.addShutdownHook() メソッドが導入されたようですが、現在 Java 1.5 で立ち往生しています。

0 投票する
5 に答える
971 参照

c++ - デストラクタを投げる、メモリの破損?

セマンティック動作が次のようなクラスがあります:-

dtorsで例外をスローするのは悪いことだと私は知っています。しかし、サードパーティのライブラリリソースの放棄は例外をスローします(ただし、すぐに再取得できます。何か奇妙なことです!)。このリソースのプールもあります。たとえば、Sampleクラスの配列/コンテナです。したがって、考慮すべき2つのケースがあります。動的に割り当てられたオブジェクトの破棄と動的に割り当てられたオブジェクトの配列の破棄です。

現在、アプリケーションは、アレイバージョン(プール)が使用されている場合にのみ、さまざまな実行ポイントでランダムにクラッシュします。これはメモリの破損が原因であると考えられますが、プールされていないバージョンが機能するのはなぜですか。

割り当てられたメモリはどうなりますか?それは未定義の振る舞いですか?配列の場合はどうなりますか?配列のすべての要素のdtor(少なくともメモリではなく)が呼び出されますか(最初の要素のdtorがスローされた場合など)?

前もって感謝します、

編集-1:ええと、呼び出されていないいくつかの配列要素のdtorまで追跡しました。しかし、割り当てられたメモリには問題がないようです...以下はSC22-N-4411.pdfのセクション5.3.5.7です)

<\ snip>

このような場合、メモリは常に割り当て解除されているように見えます。私は標準を解釈するのに正しいですか?

0 投票する
10 に答える
502236 参照

python - Pythonオブジェクトを正しくクリーンアップするにはどうすればよいですか?

__del__(self)上記はAttributeError例外で失敗します。Pythonは、が呼び出されたときに「グローバル変数」(このコンテキストではメンバーデータ?)の存在を保証しないことを理解しています。__del__()その場合、これが例外の理由である場合、オブジェクトが適切に破棄されることを確認するにはどうすればよいですか?

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

c++ - C++ で簡単なクラスを作成するには?

私は C++ クラスに関する多くのチュートリアルを読んできましたが、他のチュートリアルに含まれているものを見逃しています。

可視性、メソッド、および単純なコンストラクタとデストラクタを使用する非常に単純な C++ クラスを作成して使用する方法を教えてください。

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

c++ - 異なるdllで静的オブジェクトの破棄順序を強制する方法は?

2 つの異なる dllに 2つの静的オブジェクトがあります。

オブジェクトResources (シングルトン) とオブジェクトUser。デストラクタ内の Object User は、オブジェクト Resources にアクセスする必要があります。

オブジェクト User の前にオブジェクト Resources が破棄されないようにするにはどうすればよいですか?