Избегайте копирования строки из ostringstreamC++

Программы на C++. Форум разработчиков
Anonymous
Избегайте копирования строки из ostringstream

Сообщение Anonymous »

У меня есть именованный std::string, который я хочу заполнить данными через интерфейс std::ostream и избежать копирования строки.

Один из способов сделать это, требующее копирования, значит сделать следующее:

Код: Выделить всё

bool f(std::string& out)
{
std::ostringstream ostr;
fillWithData(ostr);
out = ostr.str(); // 2 copies here
return true;
}
Мне нужно передать результат через out, и я не могу вернуть ostr.str().

Я хочу избежать копирования в out = ostr.str();, поскольку эта строка может быть очень большой.

Есть ли какой-нибудь способ, возможно, с использованием rdbuf(), чтобы связать буфер std::ostream непосредственно с выходом ?

Чтобы уточнить, меня интересует поведение автоматического расширения std::string и std::ostream< /code>, чтобы вызывающему абоненту не нужно было знать размер перед call.

ОБНОВЛЕНИЕ: я только что понял, что безобидная строка out = ostr.str();, вероятно, повлечет за собой 2 копий:
  • Первая при вызове str()
  • Другой — оператором присваивания std::string.


Подробнее здесь: https://stackoverflow.com/questions/233 ... ringstream

Вернуться в «C++»