C++: копирует ли содержимое char указатель на преобразование std::string?

Когда я конвертирую char* в std::string используя конструктор:

char *ps = "Hello";
std::string str(ps);

Я знаю, что контейнеры std имеют тенденцию копировать значения, когда их просят сохранить их. Копируется вся строка или только указатель? если потом я str = "Bye" это изменит ps, чтобы указывать на "Пока"?

2 ответа

Решение

std::string объект выделит внутренний буфер и скопирует строку, на которую указывает ps там. Изменения в этой строке не будут отражены в ps буфер, и наоборот. Это называется "глубокая копия". Если был скопирован только сам указатель, а не содержимое памяти, это называется "мелкая копия".

Повторить: std::string выполняет глубокое копирование в этом случае.

str будет содержать копию psменяется str не изменится ps,

Другие вопросы по тегам