Оператор индексирования из std::vector<>
не проверяет индекс. Поскольку это неопределенное поведение, вы можете получить «то, что было раньше», или оно может рухнуть (или «что угодно»).
У вас есть функция-член at
, которая будет выдавать, если индекс находится вне диапазона. То есть:
cout << vec.at(0) << " " << vec.size() << endl;
в конце вашего main()
будет бросать.
Если это должно быть только во время выполнения, a будет предлагать использование ETS. Ценность намного превышает сложность. API прост, и если вы работаете с именованными таблицами, доступ тоже прост. Вам нужно только создать таблицу до того, как ваш gen_server будет запущен супервизором.
Две - более сложные - альтернативы:
есть ли более простой способ?
когда процесс остановился, он отправляет сообщение супервизору, содержащее состояние процесса, поэтому вы можете использовать это значение для сохранения в супервизоре (в мнезии или состоянии супервизора) и когда ваш сервер запустится (в init ), он должен отправить вызов синхронизации супервизору, чтобы получить значение состояния. У меня нет реального примера, но я надеюсь, что это имеет смысл.
В любом случае, я действительно не вижу проблем с сохранением состояния в mnesia.
извините за мой английский :)