C ++将对象添加到数组

时间:2010-09-14 23:40:25

标签: c++ arrays stack

我需要实例化一个对象并将其添加到数组中。这就是我目前在方法中所拥有的:

Row r;
rows[count] = r;

这里的问题是r在堆栈上并在函数退出后被删除。我快速解决的问题是让r静态,但那是不对的?我该怎么办? (对不起,完整的C ++ noob)。

编辑:删除Row的解构函数可以解决问题。

3 个答案:

答案 0 :(得分:7)

rows[count] = r 将对象r复制到数组中索引为count的元素。在那之后,r发生了什么并不重要,数组不受影响。

[编辑:好的,间接对r发生的事情很重要 - 因为副本使用r可以删除的内容。]

如果您习惯于(例如)Java,这是令人惊讶的,其中数组元素实际上不是对象,它只是对它的引用。

答案 1 :(得分:3)

使用std::vector代替数组,前提是Row的构造不是很艰难:

std::vector<Row> rows;

Row r;
rows.push_back(r);

当向量超出范围时,将为每个条目调用析构函数~Row()

您可以使用

访问最近添加的条目
const Row& last = rows.back();

size_t count = rows.size();
const Row& last = rows[count - 1];

答案 2 :(得分:0)

在这种情况下,您实际上是在堆栈上创建它,然后将对象复制到位置行[count]。请注意,如果您将行创建为Row对象的数组,那么在该位置已经存在了一个Row对象,该对象是使用默认构造函数创建的,您复制了该对象。

由于各种原因,在C ++中我们尝试使用标准库容器,如std :: vector和std :: list。这些将扩展以处理您添加的新元素。