問題タブ [static-initialization]

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

c++ - 名前空間での const オブジェクトの初期化

名前空間の一部の const オブジェクトを初期化する際に問題が発生しています。次のような名前空間があります。

HI初期化をデバッグするとBYE、文字列リテラルが割り当てられていることがわかります。実行は initialziae まで続きHI_AND_BYEますが、関数に入ると、 と のcreateHiAndByeVector()両方HIBYE値がなくなります。次に、push_back()メソッドでセグメンテーション違反が発生します。コール スタックを見ると、次の行が表示されます__static_initialization_and_destruction_0()。何が起こっている?オブジェクトが構築された直後に破棄されますか?

0 投票する
0 に答える
216 参照

c++ - インスタンス化されていないテンプレート クラスの静的メンバー変数のコードがコンパイラによって生成されないのはなぜですか?

この質問は、主にクラスのインスタンス化とテンプレートのインスタンス化という用語のために、言葉にするのが難しいです。静的関数とメンバーでいっぱいのテンプレート クラスがあります。このテンプレートを特殊化するたびに、最初に使用する前に初期化を行う必要があります。

私の最初の計画は、テンプレート クラスに静的メンバーを与えるだけinitializerで、動的初期化での構築中にテンプレート クラスの静的メンバーを初期化することでした。

ただし、これは機能しません。クラスでコードを明示的に呼び出さない限りinitializer、コンパイラはそのコードやストレージを生成しません。

例えば:

出力は単に「非同期」です。

WorkerPool<T>::async()ただし、呼び出しを呼び出すように変更すると_initializer.foo()、イニシャライザはコンパイルされ、正しく構築されます。期待どおりです。

コンパイラが静的メンバーのコード生成を拒否するのはなぜですか?

Visual Studio 2010/2012、gcc、clang でテストしましたが、すべて同じ結果が得られました。私の静的メンバーは構築されていません。これにより、標準ではこの動作が必要であると思われますが、なぜそうなのか理解できません。

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

c++ - 構造体パラメーターのデフォルト値

次の構造体があるとしましょう。

次の関数を呼び出すときに、この構造体をデフォルト値に初期化したい。それが役立つなら、私は単純なゼロ初期化を探しています。

ただし、このコードではコンパイルエラーが発生します。VS2003とVS2008を試しました。

注:コンストラクターの使用について言及している他の回答を見てきました。ただし、初期化に使用している値をユーザーに確認してもらいたい。

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

java - Powermock - @SupressStaticInitializationFor が機能していません

ネイティブメソッドと、dllをロードしてpowermockでモックした静的初期化子を含むクラスがあるため、静的初期化子を抑制し、dllをロードしないでください。

クラスは次のようになります。

Windows では、Maven を使用してテストが正常に実行されます (Eclipse および cmd)。しかし、CI サーバー (UNIX システム) にプロジェクトをビルドさせると、すべてのテストでエラーが発生します。

テストは次のようになります。

私にとって紛らわしいのは、静的イニシャライザを抑制する必要があるという事実にもかかわらず、dll をロードできなかったという java.lang.UnsatisfiedLinkError が表示されるという事実です。

バージョン:

  • モッキート: 1.9.0
  • パワーモック: 1.4.12
  • JDK: 1.7

また、この問題の回避策として、これを pom.xml に追加する必要がありました: PowerMock の問題

これは私が得るスタックトレースです:

この問題の既知の問題または修正はありますか?

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

c++ - テンプレートクラスの静的フィールドを内部クラスの型で初期化する方法

私はこのようなものを持っています

私が得るエラーは言う::16: error: expected constructor, destructor, or type conversion before ‘*’ token

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

java - 静的ブロックの初期化が実行されたかどうかを知る方法は?

私はいくつかのメモリリークを取り除こうとしています。クラスローダーからすべてのクラス (私のものだけでなく) のすべての静的変数をリセットしたいと思います。classesClassLoader によって認識されるすべてのクラスをリストする属性があります。

だから私はそれをループして、リフレクションで静的変数をnullに設定したいだけです。

問題は、これらすべてのクラスが必ずしも初期化されていないことです (静的ブロックの初期化が実行されませんでした)。値をリセットしてからクラスをアンロードすることが目的であるため、このクラスを初期化しても意味がありません。さらに、別のクラス CHILD の SBI で使用されているクラス ROOT をリセットすると、CHILD の SBI を実行すると、予期しない動作が発生する可能性があります...

問題は、SBI が JVM によって実行されたかどうかを知る方法はあるのかということです。


ノート:

ClassLoader の findLoadedClass を使用することを提案する人には、仕様に次の重要な文があります。初期化は、JLS3 $12.4.1 で定義された正確な瞬間にのみ発生します *

0 投票する
3 に答える
13197 参照

static - Goでの静的初期化?

私は現在、Go Lang チュートリアルに取り組んでいますが、演習の 1 つで問題が発生しました。

https://tour.golang.org/methods/23

この演習では、ROT13 暗号を実装します。バイトから回転された値へのマップを使用して暗号を実装することにしましたが、このマップを初期化する最良の方法がわかりません。リテラルを使用してマップを初期化したくはありませんが、ループ内でアルファベットをループし、(キー、値) ペアを設定することにより、プログラムで実行することをお勧めします。また、マップが Rot13Reader 構造体/オブジェクトからのみアクセス可能になり、すべてのインスタンス (?) が同じマップを共有するようにしたいと考えています (Rot13Reader ごとに 1 つのコピーではなく)。

これが私の現在の作業Goプログラムです:

これで私が抱えている問題は次のとおりです。

  • 準備しなくていいrot13Mapmain()
  • rot13Map私はグローバルスコープになりたくありません。
  • rot13Readera の各コピーに個別の a を持たせたくないrot13Map

Goで私が望むものを達成する方法はありますか?

0 投票する
6 に答える
240 参照

java - 静的初期化のために呼び出されるコンストラクター

Bruce Eckel 4th Edition の Thinking in Java を読んでいます。Chapter Initialization & Cleanup, page : 189 の 2 番目の段落の最初の箇条書きで次のように述べています。

static キーワードを明示的に使用していなくても、コンストラクターは実際には静的メソッドです。

次のコードがあります。

内容が正しい場合 Foo のコンストラクターが呼び出されているはずです。次のコードでは、それが起こっているとは思いません。

出力は次のとおりです。

誰かがそれが何を意味するのかを明確にすることができますか?

頑張って本を引用してみました。そのステートメントの前またはその後の部分は、質問の文脈でこのステートメントとあまり関連していないと思います。

ありがとう、

ガッジ

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

c# - C# での静的初期化子のスレッド セーフ

静的イニシャライザはスレッドセーフだと誰もが言いますが、私は特定の詳細について心配しています。

私が持っているとしましょう

MyStaticClass.myFieldがまだ初期化されていない場合、C# が保証するのは次のうちどれですか?

  1. myFieldスレッド 1 と 2 が一緒に (この順序で)アクセスしようとすると、スレッド 2 が読み取る前に実行GetNewObject開始さmyFieldれます。

  2. myFieldスレッド 1 と 2 が一緒に (この順序で)アクセスしようとすると、スレッド 2 が読み取る前に実行GetNewObject終了しmyFieldます。

一般的に CLR はどうですか? その保証が C# のものと異なる場合、それらはどのように異なるのでしょうか?
最近のバージョンの .NET Framework で動作が変更されましたか?

ノート:

これは難しい質問であり、完全な回答はおそらく静的コンストラクターと静的初期化子の違い、およびそれらがどのように相互作用しbeforefieldinitて要求された結果を生成するかについて言及すると思います。