質問

している場合はクラスという試験::

class Test
{
    static std::vector<int> staticVector;
};

ただし一部のサービスについては staticVector く構築され、ただし一部のサービスについてはを得られるので、あなたの破壊?

これまでのインスタンス生成の最初のオブジェクトのテストクラス、またはのように通常の静的変数には?

で明らかにこの問題の頭文字を取ったもの読概念のプログラミング言語(Sebesta Ch-5.4.3.1では:

した場合は 静的 修飾子 表の宣言 変数のクラス定義のC++, Java、C#ではな の寿命を可変となります。その の文脈で、この変数は クラス変数ではなく、 インスタンス変数となります。複数の使用 の予約語では混乱 特にその学習の 言語です。

かったのですか。:(

役に立ちましたか?

解決

とまったく同じように通常の静的(グ、グローバル変数です。

他のヒント

いつもアカウントとリンinitializatonによるものであるか、その後のリンクです。


最初のリストも可能です。

  • 名前空間 静的
  • クラス 静的
  • 静的

名前空間に静止

  • あの初期化方法。 静的 (対象が起こるコンパイル時) 動的 (対象が起こるのでランタイム)を設定する処理です。
  • 静的 初期化 が起こる前に 動的初期化を無視のユニットです。
  • 動的 Initiaizationは翻訳単位があり、特定の順序は存在しませんの静的初期化.物の名前空間の範囲と同じ換ユニットを動的に初期化され、その定義が表示されます。
  • ポッド型オブジェクトが初期化され一定の表現の静的初期化されます。その価値に依拠することができるのanyオブジェクトの動的な初期化の視のユニットです。
  • の場合は初期化の例外がスロー, std::terminate が呼び出されます。

例:

以下のプログラム版画 A(1) A(2)

struct A { 
  A(int n) { std::printf(" A(%d) ", n); } 
};

A a(1);
A b(2);

次に、同じクラス版画 A(2) A(1)

extern A a;
A b(2);
A a(1);

ろうふりがある訳単位が msg 定義として以下の

char const *msg = "abc";

これにより,以下のような版画 abc.ご注意 p 受動的を設定する処理です。では、static初期化(char const* はポッドタイプ "abc" は、住所を定式) msg が起こる前に、こンターネットカフェでは、あ msg 保証するものではあが正しく初期化されます。

extern const char *msg;
struct P { P() { std::printf("%s", msg); } };
P p;
  • 動的 初期化のオブジェクトが不要になる前にメインです。初期化けが起こる前のオブジェクトや機能、翻訳単位です。この重要な動的ローダブ図書館です。

クラスの静的

  • ように振る舞い名前空間統計情報に
  • があるバグ報告などはコンパイラが初期化クラスの統計の利用の関数はオブジェクトの翻訳単位のもの(メイン).の言葉に、現在ではこの名前空間範囲の物体が今年も、見に来て下さいねをするためのクラスの範囲はオブジェです。読む 物の名前空間範囲.
  • クラスの統計とメテンプレートのルールであるだけに初期化されます。を使用しないお問い合わせをお待ちいたして利回りを設定する処理です。るということに注意してくださる場合、初期化が起きるかのように説明します。初期化は遅れることがでのテンプレートを作成します。

地元静

  • 地域統計の特別ルールが起こる。
  • ポッド型オブジェクトで初期化され一定の表現は、初期化される前にブロックごとの定義を入力します。
  • その他の地域の静的オブジェが初期化され、初めての制御を通りその定義で設定します。初期化プラクティスと考えられていない完了の場合、例外がスローされます。初期化する試みたものです。

例:以下のプログラム版画 0 1:

struct C { 
  C(int n) { 
    if(n == 0)
      throw n;
    this->n = n;
  }
  int n;
};

int f(int n) {
  static C c(n);
  return c.n;
}

int main() {
  try { 
    f(0); 
  } catch(int n) { 
    std::cout << n << " "; 
  }
  f(1); // initializes successfully
  std::cout << f(2);  
}

すべての上記の場合には、一定の限られた場合、オブジェクトに対する必要がないので静的初期化され、コンパイラで静的初期化すものではなく、動的に初期化します。これは難しい問題を参照 この答え 詳しい例です。

また、秩序の破壊が可能になったの竣工のオブジェクト。これは共通して起こるすべてのような状況のC++を含む破壊temporaries.

で構築と同時に、グローバル変数の取得を建設、破壊、グローバル変数です。

単純に言えば:
静的変数の委員は、構築時にグローバル変数を構築します。建設順序のグローバル変数が定義されていないが、それ以前の主機能が入力されます。

破壊の場合のグローバル変数が破壊されることになります。

グローバル変数が破壊され、逆の順序で構築降の主機能です。

について
Ovanes

P.S.:からくはC++の標準を説明する(定義)がグローバルあるいは静的なメンバ変数を構成や破壊.

P.P.S.:コードだけを宣言しstaticのメンバー変数がない初期化します。初期化でき書の作成単位:

std::vector試験::staticVector;
または
std::vector試験::staticVector=std::vector(/*ctor paramsこちら*/);

特定のVC++情報の場合はそれを使う:

  1. 静的なクラス変数の建設を同時に起こしてその静的-グローバル変数です。
  2. Windowsでは、CRT起動機能を担うこと。これは、実際のエントリポイントのほとんどのプログラムでコンパイル(この機能をメイン/Winmain機能)。また、責任の初期化全体にCランタイムサポート(例えば必要なものにしてmalloc).
  3. の建設が未定義して使用の場合microsoft VCコンパイラの建設のための基本型とさせていただきます、例えばで法務-安全書

統計情報にh:...MyClass宣言...静const int a;static int b;static int ar[];} statics.cpp:

const int MyClass::a = 2;
int MyClass::b = a+3;
int MyClass::ar[a] = {1,2}

静的クラスのメンバー変数とも複数のオブジェクトと同じクラスでは、変数とほぼ同一とならすべてのオブジェクトのクラスです。

そこで私の言うとおり構成されていますが最初のオブジェクトのインスタンスを生成や破壊が最後のオブジェクトがdesctructed.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top