如果std :: string永远不会修改,它可以在创建后移动吗?

时间:2014-01-06 16:32:31

标签: c++ c++11

我使用std :: string进行内存管理和存储位置相关数据的效率。

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

我想知道的是,如果他们在初始化之后保证会留在一个地方,假设他们永远不会被改变?

3 个答案:

答案 0 :(得分:2)

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

但是,有一点需要注意的是,如果使用非简单分配器,则无论您如何与字符串进行交互,分配的内存都可能被该分配器更改。但是,通常使用简单的分配器,分配的内存和指向该内存的指针的内容不应该自发地改变。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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