如果 std::string 从未被修改,它可以在创建后移动吗?
Can std::string move after creation if it's never modified?
我正在使用std::string,因为它的内存管理和存储位置相对数据的效率。
std::string 初始化的长度为 30 个字节,之后除了析构函数之外,永远不会对其容器进行任何调用。
我想知道的是,假设它们永远不会被更改,它们在初始化后是否保证留在一个地方?
如果通过移动,你的意思是指向字符串的内部指针可能会被更改,那么不,只要你不调用任何非常量字符串方法,就不应该发生这种情况。
但是,需要注意的是,如果使用非简单分配器,则分配的内存可能会由该分配器更改,而不管您如何与字符串交互。但是,通常情况下,使用简单的分配器,分配的内存的内容和指向该内存的指针不应自发更改。
除非您以某种方式修改字符串,否则其动态数据的地址不会更改。我强烈建议您在描述的情况下使用const std::string
以获得更好的可读性和可维护性。
这
听起来好像您可能想使用 std::unique_ptr<char[]>
而不是 std::string
。这使得你实际上并没有存储一个字符串,而只是想要自动销毁,明确的事实。
相关文章:
- 在从仅移动类型派生的类中定义析构函数在使用 std::vector emplace_back或push_back创建时会
- Qt 创建器:将库移动到 subdir 后无法打开共享对象文件
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- c++ 从成员函数创建新线程并移动对象和整个对象
- 如何找到通过仅移动相邻字符创建的字符串的排列?-C++
- ROS创建移动的类
- 通过移动从两个向量创建元组向量
- 创建一个移动分配函数,不断得到"pointer being freed was not allocated"
- std ::移动不要创建派生类
- 如何创建可变参数模板函数来移动参数值并处理左值和右值
- 绘制像素以在Qt中创建移动效果
- 将原始指针移动到已创建函数中的下一个字符
- 我正在从 C 移动到 C++ 并且我没有得到这个类的创建
- 为什么在这种情况下不调用我的移动构造函数?(首先分配 r 值引用并创建对象)
- 如果 std::string 从未被修改,它可以在创建后移动吗?
- 是否可以创建一个只有const/reference成员的可移动类
- 使用可移动节点创建有向图(使用 QT / Boost)
- 将 QFile::copy 创建创建文件的副本或将内容从一个文件移动到另一个文件
- 首先创建字符串,然后通过移动语义将其添加到 vector 或在 vector 中创建元素是否具有内存效率
- 如何以编程方式区分由 subst 命令创建的虚拟驱动器和实际的可移动驱动器