Один из способов сделать это, требующее копирования, значит сделать следующее:
Код: Выделить всё
bool f(std::string& out)
{
std::ostringstream ostr;
fillWithData(ostr);
out = ostr.str(); // 2 copies here
return true;
}
Я хочу избежать копирования в 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