我想在函数中分配一个向量数组。每个向量都应该以0开始。之后我想将对象T的指针推送到我的向量。最后,我希望在每个单元格中都有一个带有引用列表的网格。我被困在矢量的初始化。看来他们没有分配?
typedef std::vector<T*> GridCell;
GridCell* mGrid;
...
int gridSize = 5;
mGrid = new GridCell[gridSize];
mGrid[gridSize] = { GridCell() }; //runtime error here
这可能与其他帖子重复,但我找不到100%解决此问题的帖子。
答案 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
所做的任何事情的包装。