問題タブ [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 投票する
1 に答える
561 参照

c++ - デストラクタ呼び出し後にメンバー変数にアクセスする

私はこのようなコードを持っています:

デストラクタへの明示的な呼び出しの後、クラスのすべてのメンバー変数にTestアクセスできない可能性があるため、呼び出しfoo.blub()は無効です。メンバー変数へのアクセスを避けるために参照をローカル変数に格納すると、呼び出しはfoo.blub()確実に機能しますか? コンパイラはローカル変数を最適化し、デストラクタの呼び出し後にメンバー変数にアクセスして、再び無効にすることはできませんか?

0 投票する
1 に答える
126 参照

c++ - C++ の意図しないデストラクタ呼び出し

C++ のデータ構造に関する宿題がありますが、奇妙な問題に遭遇しました。ちょっと意味不明なタイトルですみません。まず、宿題として、実装する PaperRepository クラスのヘッダー ファイルを用意しました。このクラスは、循環二重リンク リストを介して論文の情報を保持します。すべての論文には、タイトル、論文が発行されたジャーナル、発行年、および別のリンク リスト クラス (ソートされたリンク リスト) によって保持されている共著者のリストがあります。ここに PaperRepository.h ファイルがあります。

論文を保持するために、循環二重リンク リスト クラスを実装しました (私のインストラクターが言ったように)。ここに CDoublyLinkedList.cpp があります

これが LinkedList.cpp です。共著者をリストに追加したり削除したりしないので、ここでは add メソッドと remove メソッドを記述しません。LinkedList.cpp

そして、PaperRepository クラスの add メソッドの実装は次のとおりです: PaperRepository.cpp

問題はメソッドの追加から始まるため、他のメソッドは追加しませんでした。最後に、Paper クラスと CoAuthor クラスの重要な部分があります。紙.cpp

そしてCoAuthor.cpp

そして、これは私が現在テストしているファイルです。main.cpp

プログラムを実行すると、CDoublyLinkedList.cpp ファイルの add メソッドのコマンドが呼び出され、「Node newNode = new Node(data)」が実行された時点で、LinkedList クラスのデストラクタが呼び出されます。これは私には非常に奇妙です。さらに、LinkedList クラスのデストラクタは合計 5 回呼び出されます。循環二重リンク リスト クラスにデータを追加すると、他のリンク リスト クラスのデストラクタが呼び出されます。申し訳ありませんが、これは少し長くなりますが、他の方法で説明することはできません. この main.cpp ファイルの出力は次のとおりです。

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

c++ - 単一の shared_ptr を 1 つずつ破棄する

shared_ptr を 1 つずつ破棄しようとしていますが、最後のポインターを破棄すると、use_count() が異常になります。私のコードを観察してください:

デバッガーで次の出力が生成されます。

最終的な破壊で use_count() を 0 に設定し、整数のメモリの割り当てを解除することを期待していました。これは何も起こっていないようです。

use_count() == 1 の場合に if() ステートメントを使用できますが、これは非常に洗練されていないようです。誰かが別の解決策を知っていますか?