Нет портативного способа сделать это. Реализация совершенно свободна для хранения в буфере без изменений после вызова clear()
. Если OTOH, clear()
освобождает буфер строки, cstr теперь указывает на нераспределенную память, но даже в этом случае это зависит от того, как распределитель памяти обрабатывает это. Распределитель отладки заполнит блок некоторым магическим числом, например 0xDEADBEEF, а рабочий распределитель может оставить его без изменений или вернуть всю страницу обратно в ОС.
Каким бы способом вы его не вырезали, использование указателя, возвращенного c_str()
после того, как строка была изменена, является неопределенным поведением. Конец истории.