Если бы мне нужна изменяемая необработанная копия строкового содержимого c ++, то я бы сделал это:
std::string str = "string";
char* chr = strdup(str.c_str());
и позже:
free(chr);
Так почему же нетя возлюсь с std :: vector или new [], как кто-либо еще?Потому что когда мне нужна изменяемая необработанная строка char * в стиле C, тогда я хочу вызвать код C, который изменяет строку, а код C освобождает вещи с помощью free () и выделяет с помощью malloc () (strdup использует malloc) .Поэтому, если я передам свою необработанную строку какой-нибудь функции X , написанной на C , она может иметь ограничение на свой аргумент, который она должна размещать в куче (например, если функция может захотетьвызвать realloc по параметру).Но очень маловероятно, что он будет ожидать аргумент, выделенный (каким-то образом переопределенным пользователем) new []!