Leyendo directamente de un std :: istream en un std :: string

¿Hay alguna forma de leer un número conocido de bytes, directamente en una cadena std ::, sin crear un búfer temporal para hacerlo?

Por ejemplo, actualmente puedo hacerlo por

boost::uint16_t len;
is.read((char*)&len, 2);
char *tmpStr = new char[len];
is.read(tmpStr, len);
std::string str(tmpStr, len);
delete[] tmpStr;

Respuestas a la pregunta(6)

Su respuesta a la pregunta