問題タブ [destruction]
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++ で BNF 定義を処理する方法に関する問題に遭遇しました。
現在、私のセットアップは次のとおりです。
Rule.h:
ルール.cpp:
ChainRule、OrRule、KleeneRule、OptionalRule、および EmptyRule は、次のように自明に定義されます。
Rule の各サブクラスは明らかに parse() の適切な実装を定義します。これらのクラスを使用して、次のように文法を定義できます。
問題は次のとおりです。オーバーロードされた各演算子は、新しいオブジェクトを値で返します。つまり、 operator>> または operator| を使用するたびに Rule クラスから、operator>> または operator| への呼び出しから戻ると、これらのポインターはガベージになります。スタックがクリーンアップされ、オブジェクトがなくなったためです。
Rule サブクラスのコンストラクターで値渡しを使用することもできません。再帰的な文法を定義できないからです。
したがって、オブジェクトを値で渡すオプションも、オブジェクトをポインターで渡すオプションもありません。私の文法をそのように定義することを強制しない解決策を誰かに教えてもらえますか?
PS さまざまなパーサー ジェネレーターと Boost.Spirit を認識していますが、私の目標は独自のパーサーを作成することです。
c++ - C++ の静的メンバーを含む静的メンバーを持つクラス
静的メンバー「obj」を含むクラスがあります。静的クラス メンバー obj 自体には静的メンバーが含まれています (クラスのミューテックス型になります)。
私のプログラムが終了すると、クラッシュします。これは、静的オブジェクト 'obj' が破棄されたときに発生します。「obj」のデストラクタは、その静的メンバーを呼び出します (基礎となる低レベル オブジェクトを破壊するために、RAII イディオムに従う私自身のミューテックス タイプ)。残念ながら、静的オブジェクトの初期化順序 (-> 逆のデストラクタ順序) が定義されていないため、このメンバーは既に破棄されています。
これからきれいに生き残る方法は?私はこれがより頻繁に起こっていないことに驚いています。一般に、静的な非 POD メンバーを持つことは非常に危険なようです。特に内部構造をよく知らない場合。
c++ - 混合言語 F77/C++ : C++ インスタンスの破壊を避ける
Fortran と C++ を組み合わせる必要があります。C++ クラスを作成しました。C++ ライブラリを呼び出す extern "C" 関数のおかげで、C++ パブリック関数を呼び出すことができます。
この関数は、この C++ クラスのいくつかのインスタンスを作成します。この関数が終了したら、それらのインスタンスをメモリに保持して後で呼び出す必要があります。しかし、破壊私のインスタンスは自動的に呼び出されます。
これらのインスタンスを Fortran では使用したくありませんが、ラップされた他の C++ 関数で使用したいと考えています。iso_c_binding や Fortran 2003 関数は (残念ながら) 使用できません。
インスタンスをメモリに保持するための簡単なアイデアはありますか?
前もって感謝します。
c++ - ベクトルはコンテンツを正しく消去しません (クラッシュするまでコピー代入演算子の無限の実行 [BEX])?
私の問題は、ロードされた DLL を「アンロード」した後、コピー代入演算子がクラッシュするまで無制限に呼び出されることです。
ベクター データを削除するコードは次のようになります。
ただし、「[DBG]UnloadPlugins()::Done」は印刷されません。
これは私のコピー代入演算子です:
したがって、ログは次のようになります。
問題は何でしょうか?
c++ - アンマネージC++からマネージデストラクタを明示的に呼び出す
ラッパークラスを介して.NETチャートユーティリティを利用するネイティブC++プロジェクトがあります。ラッパークラスの縮小版は次のようなものです。
関数は、ラッパーを介してチャートのインスタンス化、操作、および削除を処理します。
プログラムインスタンス中に何百ものチャートを作成する可能性があります。終了時に呼び出すことで各ラッパーを明示的に削除delete
しますが、管理対象オブジェクトManagedChartClass
はプログラムの終了時にのみ破棄されます。これにより、不要なメモリが蓄積され、「メモリ不足」の例外が発生します。
ラッパーが破棄されたときに管理対象オブジェクトが破棄されていることを確認するにはどうすればよいですか?
java - JavaガベージコレクションとC++オブジェクト破壊の違いは何ですか?
ガベージ コレクションは (C++ の意味で) 破壊とは異なることをどこかで読みました。彼らはどのように違うのですか?
java - Java ゲームでのオブジェクトの破壊
Java ゲームにオブジェクト ボーナスがあります。オブジェクト ヒーローがオブジェクト ボーナスに触れると、オブジェクト ボーナスは破壊され、画面から消え、メモリを占有しないようにする必要があります。どうやってするの?
よろしくお願いします。
c++ - 名前空間での const オブジェクトの初期化
名前空間の一部の const オブジェクトを初期化する際に問題が発生しています。次のような名前空間があります。
HI
初期化をデバッグするとBYE
、文字列リテラルが割り当てられていることがわかります。実行は initialziae まで続きHI_AND_BYE
ますが、関数に入ると、 と のcreateHiAndByeVector()
両方HI
にBYE
値がなくなります。次に、push_back()
メソッドでセグメンテーション違反が発生します。コール スタックを見ると、次の行が表示されます__static_initialization_and_destruction_0()
。何が起こっている?オブジェクトが構築された直後に破棄されますか?
c++ - デストラクタへの明示的な呼び出しの動作
の定義some_class
は次のとおりです。
オブジェクトの存続期間が終了すると、その破棄は次のようになります。(1)デストラクタを呼び出し、(2)クラス定義で宣言されているのと同じ順序(=メモリ内の位置)でサブオブジェクトを破棄します。
しかし、私がそのようなものを持っている場合:
ステップ(2)も実現されていますか?つまり、X行では、サブオブジェクトのデストラクタも呼び出されますか、some_class
それともデストラクタの本体のみが実行されますか?