Что такое поведение статической переменной при множественном связывании библиотеки, содержащей ее на C++? ⇐ C++
-
Anonymous
Что такое поведение статической переменной при множественном связывании библиотеки, содержащей ее на C++?
Представим себе сценарий, в котором у меня есть исполняемый файл (A), dll (B) и библиотека (C).
И A, и B связывают C и включают его заголовочные файлы. Теперь в C существует класс:
класс Foo { статическая константа Bar& getShared(); // только что определено в cpp, возвращающее _sharedVarible статическая панель _sharedVarible; }; Означает ли это, что в этом сценарии у меня будет несколько копий sharedVariable внутри A и B, если я вызову getShared() в каждом из них?
>
Если C также является .dll, ситуация будет такой же, или, поскольку C является dll, у меня есть только один уникальный экземпляр этой sharedVariable как для A, так и для B. ?
И последнее: если оба сценария приводят к созданию нескольких копий этой переменной, это решение, в котором C по-прежнему будет .lib:
// в каком-то заголовке C... внешний бар SharedVariable; // в каком-то cpp C... SharedVariable = Бар (); наконец-то предоставил мне только один уникальный экземпляр глобальной sharedVariable для A и B? В этом последнем случае имеет ли значение, является ли C .lib или .dll?
Представим себе сценарий, в котором у меня есть исполняемый файл (A), dll (B) и библиотека (C).
И A, и B связывают C и включают его заголовочные файлы. Теперь в C существует класс:
класс Foo { статическая константа Bar& getShared(); // только что определено в cpp, возвращающее _sharedVarible статическая панель _sharedVarible; }; Означает ли это, что в этом сценарии у меня будет несколько копий sharedVariable внутри A и B, если я вызову getShared() в каждом из них?
>
Если C также является .dll, ситуация будет такой же, или, поскольку C является dll, у меня есть только один уникальный экземпляр этой sharedVariable как для A, так и для B. ?
И последнее: если оба сценария приводят к созданию нескольких копий этой переменной, это решение, в котором C по-прежнему будет .lib:
// в каком-то заголовке C... внешний бар SharedVariable; // в каком-то cpp C... SharedVariable = Бар (); наконец-то предоставил мне только один уникальный экземпляр глобальной sharedVariable для A и B? В этом последнем случае имеет ли значение, является ли C .lib или .dll?
Мобильная версия