Я, вероятно, неправильно понял, как работают статические объекты. Пусть следующийstatic global std :: unique_ptr исчезает
common.hpp
struct common {};
static std::unique_ptr<common> global_ptr;
foo.cpp
#include "common.hpp"
void bar();
int main()
{
global_ptr = std::make_unique<common>();
bar();
}
bar.cpp
#include "common.hpp"
void bar()
{
*global_ptr; // crashes, because global_ptr is empty
}
Я отладить такую ситуацию, и &global_ptr
отличается main()
и bar()
, почему? global_ptr
определенно инициализирован в main()
, я могу использовать его без проблем, но почему global_ptr
в bar()
кажется унифицированным?
Можно ли определить его как глобальное в одной единицы перевода и 'extern' в других? – Zereges
@ Zereges Это не имеет смысла. Статическая переменная видна только в своей собственной единицы перевода. – songyuanyao
Я имел в виду не статическую (только в глобальном масштабе) и 'extern' в файле заголовка. – Zereges