0

私は次のコードを持っています:

void Foo() {

   static std::vector<int>(3);

   // Vector object is constructed every function call

   // The destructor of the static vector is invoked at
   // this point (the debugger shows so)
   // <-------------------

   int a;
}

それからどこかで私Fooはシーケンスで数回電話します

呼び出しのたびにベクトルオブジェクトが作成されるのはなぜですか?また、宣言Foo()の直後にデストラクタが呼び出されるのはなぜですか?static ...


アップデート:

メカニズムを呼び出して関数を実装しようとしていたのですが、

static core::CallOnce(parameters)クラス名はどこにCallOnceあるのでしょうか。

私の考えでは、書くことstatic core::CallOnce call_once(parameters)は悪く見えますが、大丈夫、これは私がそれで何もできない場合です。

ありがとうございました。

4

3 に答える 3

12

変数には名前が必要です。

static std::vector<int> my_static_vector(3);
于 2010-08-01T03:59:55.087 に答える
7

ベクトルに名前を付けるのを忘れたため、ベクトルを指す変数がないと、作成直後に破棄されます。

于 2010-08-01T04:00:26.213 に答える
4

名前のない一時的なものを作成するためstd::vector<int>(3)、含まれている式の最後までしか存続しません。ただし、デバッガーは構築と同じ行に破棄を表示できないため、次の行に表示します。

アイテムに名前を付けると、通常のstaticセマンティクスが適用されます。

于 2010-08-01T04:01:12.107 に答える