В прекомпилированном заголовке создается статический объект.
#pragma once
#include
class globale {
public:
int A;
globale::globale() {
A++;
std::cout << "
1";
std::cout << "
A=" << A;
}
};
static globale object_;
Главный код:
#include "stdafx.h"
int main()
{
std::cout << "
object_.A=" << object_.A;
std::cout << "
";
std::system("pause");
}
В итоге globale object_; формируется дважды. То есть дважды вызывается конструктор.
Если переместить
static globale object_;
после
#include "stdafx.h"
то всё нормально.
Это вызов одного и того же объекта?
Почему так происходит?
Можно ли это исправить?
Ответ
Какие cpp-файлы есть в проекте? Если есть stdafx.cpp, то я буду не удивлен созданию двух разных статических объектов: по одному на каждый cpp-файл проекта. Решение - переместить определение статического объекта в cpp-файл. Если требуется использование этого объекта в других файлах проекта, то необходимо переписать код. Например, использовать ключевое слово extern, говорящее компилятору искать данный символ в других файлах, а не в текущем.
Комментариев нет:
Отправить комментарий