Если это делает пересчет, то есть ли вероятность недопустимого доступа к памяти при передаче по значению, поскольку в памяти есть одна копия строки?
Наиболее string
реализации делают то, что называется копированием при записи, что означает просто копирование строки по значению (через конструктор копирования или operator=
или еще много чего) не выделяет новую память и не копирует содержимое строки. Только если вы пишете в этот общий буфер, он выполняет копирование, уменьшая счетчик ссылок, чтобы последняя живая строка могла безопасно записать в свой собственный буфер.
Это все прозрачно, хотя, вы не должны заботиться о том, как это работает, кроме академической ценности.