Нет, вам не нужно освобождать указатель ptr
.
ptr
указывает на неизменяемую строку, расположенную где-то во внутреннем местоположении (на самом деле это детали реализации компиляторов).
Ссылка:
Документация C ++ :
const char* c_str ( ) const;
Получить эквивалент строки C
Создает завершенную нулем последовательность символов (c-string) с тем же содержимым, что и строковый объект, и возвращает его в качестве указателя на массив символов.
Завершающий нулевой символ добавляется автоматически.
Возвращенный массив указывает на внутреннее местоположение с требуемым пространством хранения для этой последовательности символов плюс его завершающий нулевой символ, но значения в этом массиве не должны изменяться в программе и гарантированно останутся только без изменений до следующего вызова непостоянной функции-члена строкового объекта.