Делает ли std :: string пересчет выделенной памяти? Как передача по значению и передача по ссылке различаются в случае с std :: string?

Если это делает пересчет, то есть ли вероятность недопустимого доступа к памяти при передаче по значению, поскольку в памяти есть одна копия строки?

-1

Решение

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

Это все прозрачно, хотя, вы не должны заботиться о том, как это работает, кроме академической ценности.

-1

Другие решения