Страницы

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

суббота, 9 марта 2019 г.

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

В прекомпилированном заголовке создается статический объект. #pragma once
#include #include #include #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, говорящее компилятору искать данный символ в других файлах, а не в текущем.

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

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