У меня есть ситуация, когда у меня есть пара заголовка/реализации (x.hpp/x.cpp). Где есть статическая переменная с глобальной областью, определенной в x.cpp.Обеспечение статической переменной с глобальным масштабом существует один раз везде
Заголовок x.hpp используется во многих разных местах в рассматриваемом приложении. и также предназначен для использования библиотек DLL, которые приложение будет использовать, либо автозагрузкой или через dlopen/LoadLibrary т.д.
--- x.hpp ---
int foo();
void boo();
class fooboo
{ public: void boofoo() {} };
-------------
--- x.cpp ---
static fooboo global_var;
fooboo foo() { return global_var; }
void boo() { global_var.boofoo(); }
-------------
.
Мой вопрос: В C++ есть средство, с помощью которого можно гарантирую при всех различных вариантов использования того, как TU (x.hpp/x.cpp) можно назвать и использовать, что только один экземпляр global_var существует ?.
Примите во внимание многопоточные и dll-ситуации. Помимо того, что каждый экземпляр в кодовой базе, который ссылается на global_var с extern, есть что-то еще, что можно сделать?
Я не уверен в ситуации с dll, но ваш пример показывает одну скрытую глобальную переменную. Поскольку он доступен только через 'foo()' и 'boo()', эти функции должны реализовывать защиту потоков. –
Все, что определяет «extern fooboo global_var»; также будет иметь доступ к глобальной переменной. – Switzy
@Switzy Я не думаю, что это правильно; ключевое слово static указывает, что переменная не имеет внешней привязки и не будет видима/доступна в других объектных файлах/библиотеках. – Rollie