我需要实例化一个对象并将其添加到数组中。这就是我目前在方法中所拥有的:
Row r;
rows[count] = r;
这里的问题是r
在堆栈上并在函数退出后被删除。我快速解决的问题是让r
静态,但那是不对的?我该怎么办? (对不起,完整的C ++ noob)。
编辑:删除Row的解构函数可以解决问题。
答案 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。这些将扩展以处理您添加的新元素。