Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Двойной вызов конструктора глобального статического объекта?

#cpp


В прекомпилированном заголовке создается статический объект.
#pragma once

#include 
#include 
#include 
#include 

class globale {
  public:
    int A;
     globale::globale() {
        A++;
        std::cout << "\n1";
        std::cout << "\nA=" << A;
    }
};
static globale object_;

Главный код:
#include "stdafx.h"

int main()
{
    std::cout << "\n\n\nobject_.A=" << object_.A;
    std::cout << "\n";
    std::system("pause");
}

В итоге globale object_; формируется дважды. То есть дважды вызывается конструктор.
Если переместить 
static globale object_;

после 
#include "stdafx.h"

то всё нормально.

Это вызов одного и того же объекта?
Почему так происходит?
Можно ли это исправить?
    


Ответы

Ответ 1



Какие cpp-файлы есть в проекте? Если есть stdafx.cpp, то я буду не удивлен созданию двух разных статических объектов: по одному на каждый cpp-файл проекта. Решение - переместить определение статического объекта в cpp-файл. Если требуется использование этого объекта в других файлах проекта, то необходимо переписать код. Например, использовать ключевое слово extern, говорящее компилятору искать данный символ в других файлах, а не в текущем.

Комментариев нет:

Отправить комментарий