如果 std::string 从未被修改,它可以在创建后移动吗?

Can std::string move after creation if it's never modified?

本文关键字:创建 移动 string std 如果 修改      更新时间:2023-10-16

我正在使用std::string,因为它的内存管理和存储位置相对数据的效率。

std::string 初始化的长度为 30 个字节,之后除了析构函数之外,永远不会对其容器进行任何调用。

我想知道的是,假设它们永远不会被更改,它们在初始化后是否保证留在一个地方?

如果通过移动,你的意思是指向字符串的内部指针可能会被更改,那么不,只要你不调用任何非常量字符串方法,就不应该发生这种情况。

但是,需要

注意的是,如果使用非简单分配器,则分配的内存可能会由该分配器更改,而不管您如何与字符串交互。但是,通常情况下,使用简单的分配器,分配的内存的内容和指向该内存的指针不应自发更改。

除非您以某种方式修改字符串,否则其动态数据的地址不会更改。我强烈建议您在描述的情况下使用const std::string以获得更好的可读性和可维护性。

听起来好像您可能想使用 std::unique_ptr<char[]> 而不是 std::string 。这使得你实际上并没有存储一个字符串,而只是想要自动销毁,明确的事实。