Почему мой конструктор вызывается снова и снова? - PullRequest
0 голосов
/ 27 августа 2010

У меня есть следующий h-файл:

#ifndef GLOBAL_DATA_H_
#define GLOBAL_DATA_H_

class GlobalData
{
  public:
    GlobalData();
    ...
  private:
    ...
};

namespace global_data
{
  static GlobalData globalDataInstance;
}

#endif

Бесчисленные файлы, включая файл заголовка выше, и доступ к global_data :: globalDataInstance.Если я добавлю точку останова в тело конструктора GlobalData, я увижу, что при запуске приложения конструктор вызывается бесчисленное количество раз.Почему это?

1 Ответ

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

Кажется, что объявление статических переменных в пространстве имен не делает то, что я думал, согласно этому сообщению:

http://bytes.com/topic/c/answers/134682-initializing-static-variable-inside-namespace

Если вы включите этот заголовок в более чем один исходный файл вы получите несколько переменных. Если вы измените значение переменной в одном файле вы не увидит изменения в другом файл.

Похоже, что свойство, которое нужно сделать, это объявить переменную пространства имен, используя extern вместо static.

...