Проблема, с которой вы сталкиваетесь, вероятно, связана с тем, как статические переменные инициализируются в C++. Давайте разберем несколько ключевых моментов.
### Статические переменные
Когда вы объявляете:
```cpp
static std::vector<Register::UserScript*> _userScripts;
```
внутри класса `Registry`, это означает, что `_userScripts` будет статической переменной для этого класса. Это значит, что она существует на уровне класса, а не в пределах экземпляра. Однако, есть несколько важных аспектов инициализации статических переменных:
1. **Инициализация статических переменных**: Статические переменные класса инициализируются в порядке их объявления в коде, а не в порядке, в котором они используются. Если у вас есть несколько разных файлов, или разные модули, которые используют эту переменную, это может вызвать проблемы, если они не инициализированы в одном и том же контексте.
2. **Определение переменной**: Вы должны убедиться, что вы определяете статическую переменную в одном (и только одном) файле. Например, если вы объявили `static std::vector<Register::UserScript*> _userScripts;` в заголовочном файле, вы должны также определить ее в одном из файлов реализации:
```cpp
std::vector<Register::UserScript*> Register::Registry::_userScripts;
```
3. **Ссылки на разные пространства имен**: Если вы инициируете переменную в одном месте (например, в одном компиляционном переводе), а затем прерываете в другом (например, в другом компиляционном переводе или модуле), это может привести к созданию той же переменной с "незаполненной" памятью.
### Возможные решения
1. **Подтвердите единственность определения**: Проверьте, что `_userScripts` инициализирована только один раз, в одном из .cpp файлов, через указание:
```cpp
std::vector<Register::UserScript*> Register::Registry::_userScripts;
```
2. **Проверьте глобальные правки**: Если вы где-либо в коде, например в другой библиотеке, используете `Register::Registry`, возможно, она также нарушает ваш контекст, если у вас множество статических библиотек с одинаковыми именами.
3. **Используйте Singleton**: Если у вас есть необходимость в едином экземпляре `Registry`, вы можете реализовать паттерн Singleton, чтобы убедиться, что у вас есть один экземпляр:
```cpp
class Registry {
public:
static Registry& GetInstance() {
static Registry instance;
return instance;
}
private:
Registry() {}
Registry(const Registry&) = delete;
Registry& operator=(const Registry&) = delete;
};
```
Таким образом, обращаясь к `Registry::GetInstance()`, вы получаете один и только один экземпляр `Registry`.
### Заключение
По всей видимости, ваша проблема вызвана тем, что вы имеете несколько определений или инициализаций статической переменной `_userScripts` в разных контекстах. Проверьте ваши файлы, чтобы убедиться, что все экземпляры и определения одного и того же класса находятся под контролем.