2015-06-02 33 views
0

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

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

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

delete cc; 

Или это куб.см только указатель на место в станде ими память: строки ...

+0

Почему вы передаете 'std :: string' в качестве копии, если вы ее не модифицируете? – emlai

ответ

3

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

1

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

См here

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^