拥有动态对象的std ::数组是否安全?

时间:2013-01-25 02:06:56

标签: c++ arrays memory-management stl c++11

拥有std::array动态对象(例如std::array<std::string, 3>)以及调整内容(字符串)的大小是否安全? (因为有一个原始C字符串数组可能会有问题)

2 个答案:

答案 0 :(得分:6)

是的,因为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的实施者*来确保这些假设是有效的。

*有一个非常高级的主题叫做模板专业化,人们可以只为“string”编写一个专门版本的数组。除vector<bool>之外,这些标准容器非常罕见。

答案 1 :(得分:1)

假设你的意思是调整字符串的大小,那就是。