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
выполняет глубокое копирование в этом случае.