問題タブ [static-variables]
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++ - ダイナミックライブラリとメインプログラムの静的クラス変数
静的なstlコンテナクラスを含むクラス「A」を持つプロジェクトに取り組んでいます。このクラスは、私のメインプログラムと.soファイルの両方に含まれています。このクラスは、デフォルト(暗黙的、宣言されていない)コンストラクタ/デストラクタを使用します。メインプログラムは、dlopen()を使用して.soファイルをロードし、そのデストラクタでdlclose()を呼び出します。glibcが静的クラスメンバー変数のデストラクタを呼び出すと、メインが終了した後にプログラムがクラッシュします。問題は、dlclose()が呼び出されると、静的変数のデストラクタが呼び出され、次にmain exits()がデストラクタも呼び出すと、ダブルフリーが発生することです。
2つの質問があります
。1)この特定のケースでは、静的変数のコピーが2つないのはなぜですか(はい、それはややばかげているように聞こえますが、メインプログラムと.soファイルの両方に別々にコンパイルされた「A」があるためです、それぞれに1つあるべきではありませんか?)
2)静的メンバー変数を含まないようにクラス「A」を書き直さずにこの問題を解決する方法はありますか?
c++ - 静的メンバーポインタ変数を設定する
クラスに静的ポインタ変数を設定しようとしていますが、設定しようとしている変数ごとにこれらのエラーが発生します。
エラーC4430:型指定子がありません-intと見なされます。注:C++はdefault-intをサポートしていません
エラーC2040:'xscroll':'int'は'float*'とは間接レベルが異なります
エラーC2440:「初期化中」:「float**」から「int」に変換できません
これがEnemy.hのコードです
変数を設定しようとしています
shared-libraries - メイン プログラムと共有ライブラリは、__static_initialization_and_destruction_0 で同じ静的変数を初期化します
dlopen() 内で初期化されたライブラリがメインプログラムが所有する静的変数を初期化する理由を知っている人はいますか? メイン プログラムと共有ライブラリの両方に静的変数のコピーがありますが、何らかの理由で共有ライブラリがメイン プログラムの静的変数のコピーを再初期化して破棄し、メイン プログラムがそれを破棄しようとすると segfault が発生します。
これは、シンボル テーブルでの不適切な名前マングリングの場合ですか?
c++ - 静的変数のコンストラクターでの静的 const 変数の値の取得
A の cstr で B::SYMBOL がまだ初期化されていないため、以下のコードではセグメンテーション違反が発生することを理解しています。しかし、なぜ?
実際には、A は、B のようなクラスの SYMBOL をそれぞれの ID にマップするマップとして機能するオブジェクトです。C は、クラス関数としてマッピングを提供できるように、この map(A) を静的に保持します。
A の主な機能は、起動時に自身を初期化する C のマップとして機能することです。コードで B::ID と B::SYMBOL を引き続き使用できる場合 (#define pls なし)、セグメンテーション違反なしでそれを行うにはどうすればよいですか?
(ps。インクルードガードを実装したと仮定します)
c - グローバル静的変数をマルチスレッドセーフにする
マルチスレッド実行で例外を生成するグローバル静的変数が C ライブラリにあります。何らかの方法でそれらを安全にする必要があります (つまり、各スレッドはこれらの変数の異なるインスタンスに関連付ける必要があります)。推奨される方法はありますか?
c++ - CライブラリのC++ラッパー
最近、C++プロジェクトで使用したいCライブラリを見つけました。このコードはグローバル変数で構成され、静的ポインターが指すメモリに出力を書き込みます。プロジェクトを実行するときに、Cプログラムの2つのインスタンスを実行したいと思います。1つは構成Aで、もう1つは構成Bです。プログラムを2回実行する余裕がないため、2つのオプションがあると思います。
- C ++ラッパーを作成する:ここでの問題は、ラッパークラスにCライブラリが持つすべてのグローバル/静的変数が含まれている必要があることです。Cライブラリの関数はこれらの変数を使用するため、これらの関数の非常に大きな引数リストを作成する必要があります。
- Cライブラリをコピーして貼り付ける:ここでは、Cライブラリ内のすべての関数とすべての変数の名前を調整する必要があります。
どれが最速の解決策ですか?同じCソースの2つのインスタンスを実行する他の可能性はありますか?
ありがとう、
マックス
java - コンストラクターが再度呼び出されていますか?
このコンストラクターがあります。
そして、同じクラスに update メソッドがあります。
デバッガーからの流れをたどると、メソッドのどこかで update が呼び出されると、プログラムがコンストラクターに入り、それを最初からやり直します (super、pageIndex など)。なぜコンストラクターに行くのですか:DIはそこに行くように指示しませんでした。
必要に応じて、より深い分析を行い、コンストラクターのどこに行くかを確認できます。ちなみに、changedComponentIndex
は静的変数です。
c++ - 基本クラスと継承の静的メソッドの静的変数
私はこれらのC++クラスを持っています:
x
静的変数はとの間で共有されますA
か、B
それともそれぞれが独自の独立x
変数を持っていますか(これは私が欲しいものです)?
iphone - 同じ型のオブジェクト間の通信用の静的変数
画像を非同期にダウンロードする方法があります。画像がオブジェクトの配列に関連している場合 (私が構築しているアプリの一般的な使用例)、それらをキャッシュしたいと考えています。アイデアは、インデックス番号を渡し (途中で作成しているテーブルの indexPath.row に基づいて)、静的な NSMutableArray にイメージを格納し、処理しているテーブルの行をキーにします。と。
したがって:
私のインデックスは正常に処理されています。NSLog の出力で確認できます。しかし、insertObject: atIndex: 呼び出しの後でも、[imageCache count]
ゼロのままになることはありません。
これは静的変数への私の最初の進出なので、何か間違ったことをしていると思います。
(上記のコードは、何が起こっているかの主要な部分だけを示すために大幅に削除されているため、それを見るときはそのことを念頭に置いてください。)
c++ - コンストラクター内の静的変数、欠点や副作用はありますか?
私がしたいこと: クラスのインスタンスがプログラム内で使用されるときはいつでも、いくつかの前提条件コードを実行します。このコードは要件などをチェックし、一度だけ実行する必要があります。
これは、別のオブジェクトをコンストラクター内の静的変数として使用して実現できることがわかりました。より良い画像の例を次に示します。
私を悩ませているのは、これまで静的変数の同様の使用法を見たことがないということです。欠点や副作用はありますか、それとも何か不足していますか? それとも、より良い解決策がありますか?どんな提案でも大歓迎です。