Правильная очистка памяти с помощью c_str () и const char *

У меня есть функция, которая принимает (char * const *). Данные, которые я предоставляю, находятся в std :: string. Итак, я делаю это:

void blahblah(std::string str)
{
const char * cc = str.c_str();
ConstCharFunction(&cc);
}

Это хорошо работает. Мой вопрос заключается в том, нужно ли мне очистить память, используемую const char ala:

delete cc;

Или cc — это просто указатель на папку mem в std: string …

0

Решение

Это указатель на память, выделенную в std :: string. Когда std :: string выходит из области видимости, память освобождается. Будьте уверены, чтобы не удерживать указатель после этого!

4

Другие решения

Нет тебе не нужно delete cc, Это действительно указатель, удерживаемый std::string объект.

Увидеть Вот

Программа не должна изменять какие-либо символы в этой последовательности.

Возвращенный указатель указывает на внутренний массив, используемый в настоящее время строковым объектом для хранения символов, соответствующих его значению.

Просто будьте осторожны, так как указатель возвращается c_str() можно сделать недействительным, вызвав модифицирующие методы строки.

2