Я использую std :: string для управления памятью и эффективности для хранения относительных данных местоположения.
Строка std :: инициализируется длиной 30 байт, и после этого никогда не будет никаких вызовов, сделанных в их контейнере, кроме, возможно, деструктора.
То, что я хочу знать, - это если им гарантировано остаться в одном месте после того, как они были инициализированы, если они не будут изменены?
Если вы перемещаете, вы имеете в виду, что внутренний указатель на строку символов может быть изменен, а затем нет, это не должно происходить до тех пор, пока вы не вызываете какие-либо неконстантные строковые методы.
Однако одно предостережение состоит в том, что если вы используете непростой распределитель, выделенная память может быть изменена этим распределителем независимо от того, как вы взаимодействуете со строкой. Обычно, однако, используется простой распределитель, и содержимое выделенной памяти и указатель на эту память не должны спонтанно меняться.
Если вы каким-либо образом не измените строку, адрес ее динамических данных не изменится. Я настоятельно рекомендую вам использовать const std::string
в том случае, если вы описываете это для лучшей удобочитаемости и ремонтопригодности.
Это звучит так, как если бы вы захотели использовать std::unique_ptr<char[]>
вместо std::string
. Это делает тот факт, что вы на самом деле не храните строку, но хотите только автоматического уничтожения, явного.