[Предполагая, что вы продолжаете реализовывать внутренние компоненты вашего класса в стиле C, что может или не может быть полезным с точки зрения скорости разработки и выполнения (в зависимости от дизайна всего проекта), но обычно не рекомендуется в пользу из std::string
и друзей.]
Поворот
const char *filename;
в
char *filename;
не порадует вас strcpy
, так как вам на самом деле нужно немного памяти для копирования вашей строки:)
Информацию о ручном коде управления памятью см. В ответе Тадеуша Копека, с которым все в порядке.
Кроме того, имейте в виду, что есть разница между
const char *filename; // "filename" points to "const char"
// and is not const itself
char const *filename; // semantically the same as above
и
char * const filename; // "filename" is const and points to "char",
// which is not const
В первом случае вы можете filename
указать на любую другую строку const char
, во втором вы можете изменить только эту строку "на месте" (таким образом, сохраняя значение filename
таким же, как это указывает на то же место памяти). Конечно, можно объединить эти два (или ни один из них), если необходимо.
P.S. Если вы называете параметр-функцию _filename
только для того, чтобы избежать коллизии имен с переменной-членом filename
, вы можете просто добавить к ней префикс this
(и избавиться от подчеркивания):
void MyClass::func (const char *filename)
{
...
this.filename = copy;
}