C ++ статические члены - PullRequest
       32

C ++ статические члены

0 голосов
/ 01 августа 2010

У меня есть следующий код:

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) выглядит хуже, но хорошо, это тот случай, когда я ничего не могу с этим поделать.

Спасибо.

Ответы [ 3 ]

12 голосов
/ 01 августа 2010

Вашей переменной нужно имя:

static std::vector<int> my_static_vector(3);
7 голосов
/ 01 августа 2010

Вы забыли дать вектору имя, поэтому без какой-либо переменной, указывающей на него, он уничтожается сразу после создания

4 голосов
/ 01 августа 2010

Поскольку std::vector<int>(3) создает неназванный временный объект, который доживает только до конца содержащегося в нем выражения.Отладчик не может показать разрушение в той же строке, что и конструкция, поэтому он показывает его на следующей строке.

Присвойте элементу имя, и будет применяться обычная семантика static.

...