Я полагаю, вы не хотите использовать промежуточный объект для предотвращения ненужного копирования?
Вы можете добиться того же эффекта, явно указав область буфера потоковых буферов.
int main()
{
std::string line;
std::istringstream currentline;
std::string eachword;
// Accept line from the standard input till EOF is reached
while ( std::getline(std::cin,line) )
{
// Set the buffer without copying.
currentline.clear();
currentline.rdbuf()->pubsetbuf(&line[0], line.length() );
while ( currentline >> eachword )
{
std::cout << eachword << std::endl;
}
}
return 0;
}
Из-запорядок уничтожения.Вам просто нужно убедиться, что istringstream уничтожен, прежде чем объект, который вы используете в качестве буфера.Таким образом, вам нужно изменить порядок объявлений в верхней части main (), чтобы убедиться, что строка создается первой и, следовательно, будет уничтожена последней (в противном случае деструктор istringstream может получить доступ к памяти свободного объекта)..