В следующей статье в разделе «Вопросы прав собственности» упоминается, что если кто-то настраивает std :: string_view для просмотра переменной std :: string, то оставляет область действия этого std :: string, std: : поведение string_view будет неопределенным.
https://www.learncpp.com/cpp-tutorial/6-6a-an-introduction-to-stdstring_view/
Я понимаю, что это связано с тем, что переменная std :: string больше не находится в области видимости и "умирает", так что то, что просматривается std :: string_view, не определено. Как можно обойти это?
Моя текущая функция что-то делает для этого:
std::string_view mergeIntoSV(std::string str1, std::string str2) {
std::string new_str = str1 + str2;
return std::string_view { new_str };
}
void callMerge() {
std::string list[10];
std::string_view views[5];
//Assume some code that populates "list"...
for (int i = 0; i < 10; i+=2) {
views[i/2] = mergeIntoSV(list[i], list[i+1]);
}
//Now I want to be able to read each of the std::string_views.
}
Однако после вызова этой функции в другом месте и последующего чтения содержимого возвращенного std :: string_view, Я (как предполагает статья) прочитал некоторое неопределенное строковое значение. К сожалению, я не могу просто изменить тип возвращаемого значения на std :: string из-за того, что я работаю с большей кодовой базой и требует, чтобы возвращаемый тип был таким, как есть.
Как обойти это проблема?