C ++指针初始化向量数组

时间:2015-05-28 10:59:22

标签: c++ arrays vector

我想在函数中分配一个向量数组。每个向量都应该以0开始。之后我想将对象T的指针推送到我的向量。最后,我希望在每个单元格中都有一个带有引用列表的网格。我被困在矢量的初始化。看来他们没有分配?

typedef std::vector<T*> GridCell;
GridCell* mGrid;

...

int gridSize = 5;
mGrid = new GridCell[gridSize];
mGrid[gridSize] = { GridCell() }; //runtime error here

这可能与其他帖子重复,但我找不到100%解决此问题的帖子。

1 个答案:

答案 0 :(得分:2)

mGrid = new GridCell[gridSize];

这一行不仅分配一个数组,而且默认构造所有的条目!

mGrid[gridSize]

这是一个越界错误;由于数组的长度为5,因此唯一有效的索引是0,1,2,3,4。尝试访问索引5处的元素是未定义的行为

vector<GridCell> mGrid(5);
// vector<GridCell> mGrid(5, GridCell()); // Same thing as the line above

这是你应该做的事情。使用现代C ++,您很少需要使用new;有一些标准对象可以满足人们曾经使用new的大多数目的(例如使用vector而不是动态数组),大多数剩余案例都有智能指针,少数情况下也是如此仍然存在,你通常可以通过编写自己的自定义类来获得更好的服务,其生活目的是成为new所做的任何事情的包装。