Есть функция Add, которая принимает в себя пару string_view и сохраняет их в некоторый контейнер для последующего доступа.
void Translator::Add(string_view source, string_view target) { .... }
Проблема в том, что в функцию Add при вызове может быть передана временная строка:
Translator::Add(string("first"), string("second"));
В таком случае Translator будет хранить в себе пару string_view, которые будут ссылаться на уже удалённые строки. Я решил сохранить копии строк в vector строк (который лежит в этом же Translator):
void Translator::Add(string_view first, string_view second) {
data.emplace_back(first);
first = data.back();
data.emplace_back(second);
second = data.back();
// ...
}
Но если к примеру я при вызове передаю string("okno"), string("windows"), то по какой-то причине first принимает значение "\000kno". Почему так происходит?
Более того, хранимые string_view повреждаются после первого вызова Translator:Add(). То есть их значения становятся что-то вроде "\000\000\000".
Как лучше сохранять копию строк?