問題タブ [explicit-destructor-call]

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 投票する
3 に答える
3500 参照

c++ - デストラクタへの明示的な呼び出し

次のコード スニペットを見つけました。

テキストには、このスニペットは実行時エラーを引き起こすはずであると書かれていました。よくわからなかったので、コンパイルして実行してみました。出来た。奇妙なことに、関連するデータが単純であるにもかかわらず、プログラムは「テキスト」を出力した後、1 秒後にのみ途切れてしまいました。

そのようなデストラクタを明示的に呼び出すことが合法であるかどうかわからなかったので、デストラクタに出力される文字列を追加しました。プログラムは文字列を 2 回出力しました。したがって、通常のプログラムの終了は明示的な呼び出しを認識せず、オブジェクトを再度破棄しようとするため、デストラクタが 2 回呼び出されると推測しました。

自動化されたオブジェクトでデストラクタを明示的に呼び出すことは危険であることが簡単な検索で確認されました。これは、2 回目の呼び出し (オブジェクトがスコープ外に出たとき) の動作が未定義であるためです。したがって、コンパイラ (VS 2017) またはこの特定のプログラムで幸運でした。

実行時エラーに関するテキストは単に間違っていますか? それとも、実行時エラーが発生するのは本当に一般的ですか? それとも、私のコンパイラは、この種のものに対して何らかのウォーディングメカニズムを実装したのでしょうか?