問題タブ [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.
c++ - デストラクタ呼び出し後にメンバー変数にアクセスする
私はこのようなコードを持っています:
デストラクタへの明示的な呼び出しの後、クラスのすべてのメンバー変数にTest
アクセスできない可能性があるため、呼び出しfoo.blub()
は無効です。メンバー変数へのアクセスを避けるために参照をローカル変数に格納すると、呼び出しはfoo.blub()
確実に機能しますか? コンパイラはローカル変数を最適化し、デストラクタの呼び出し後にメンバー変数にアクセスして、再び無効にすることはできませんか?
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 ファイルの出力は次のとおりです。
c++ - 単一の shared_ptr を 1 つずつ破棄する
shared_ptr を 1 つずつ破棄しようとしていますが、最後のポインターを破棄すると、use_count() が異常になります。私のコードを観察してください:
デバッガーで次の出力が生成されます。
最終的な破壊で use_count() を 0 に設定し、整数のメモリの割り当てを解除することを期待していました。これは何も起こっていないようです。
use_count() == 1 の場合に if() ステートメントを使用できますが、これは非常に洗練されていないようです。誰かが別の解決策を知っていますか?