Если это std::string
, о котором мы говорим, тогда все правильно освобождено.
Однако, что именно происходит под капотом, зависит от реализации. Несколько реализаций std :: string используют некоторую форму подсчета ссылок, поэтому она зависит от реализации.
Также обратите внимание, что ваш код работает так же, как:
name = "new_name";
... и даже более явно:
name.assign( "new_name" );