拥有动态对象的 std::数组是否安全
Is it safe to have a std::array of dynamic object?
具有动态对象的std::array
(例如std::array<std::string, 3>
)并调整内容(字符串)的大小是否安全?(因为拥有原始 C 字符串数组可能会有问题)
是的,因为std::array
只是一个友好的模板,它包装了一个底层的 C 样式 aray 数组。你可以把它想象成这样:
template <typename T, int size>
class Array {
...
T vals[size];
}
将上面的 T 更改为字符串,您将很快意识到,您可以对字符串数组的内容执行的任何操作都可以使用std::array
字符串执行。这包括调整大小,删除,任何你能想象到的。
要更深入地思考它,请以这种方式思考。std::array
包含一根字符串。字符串不知道它被固定在哪里。当数组本身被赋值时,数组可能会告诉字符串创建自身的副本(通过复制构造函数或赋值)。但是,这完全是通过字符串的公共接口实现的。字符串被任何数据结构保存的事实并不限制该字符串的功能,它只是使持有者(在本例中为std::array
)成为string
公共接口的另一个客户端。
由于像std::array
这样的容器需要使用各种各样的类型,因此它们往往对传入的类型T
做出相对较少的典型有据可查的假设。诸如要求 T 可以复制构造、默认构造和分配之类的东西。然后,通常由T
的实施者*来确保这几个假设是有效的。
*有一个非常高级的主题称为模板专用化,其中可以编写一个专门版本的数组,例如"字符串"。除此之外vector<bool>
这些在标准容器中非常罕见。
假设你的意思是调整字符串的大小,那么是的。
相关文章:
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 如何将元素添加到数组的线程安全函数?
- 将对象的字节复制到数组并再次复制回来是否安全
- 适用于大型数组的无复制线程安全环形缓冲区
- 问:Apache Arrow 数组生成器不安全追加
- 线程安全整数数组?
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法
- 使用字节数组具有单字节对齐方式的结构是否安全
- 在字节数组上转换具有虚函数的结构是否安全?
- 从 C# 到C++和返回的数组,没有不安全的代码
- 将整数添加到数组值而无需调用它的最安全方法
- 我可以使用模板作为多态处理数组的安全解决方案
- 静态指针指向会员数组的安全操作员[]访问
- 在固定的,无序的,拥有的数组中安全,惯用的销毁和压缩
- 在 c++ 的多个线程中编写 c 数组的不同项是否线程安全
- 标准::数组是否可安全返回
- 当结构数组在主线程中填充数据时,从结构数组的低索引元素读取是否线程安全
- 在多线程程序中使用动态数组的头段安全吗
- 当使用来自不同类的字符数组是安全的时
- 当需要数组时,将指针传递到向量中的第一个元素是否安全