您得到的 2 个答案是由于这两种不同的方式是可能的。
基于堆栈 - 本地内存,已释放且返回的指针无效
typedef int *(*TileGrid)[128];
Tile* map[128][128];
....
TileGrid GetTiles(){
return map;
}
Heap Allocated - 在堆上分配并且在函数结束后不被释放,直到这个函数的调用者去释放 -安全。
typedef int *(*TileGrid)[128];
TileGrid map = new Tile*[128][128];
....
TileGrid GetTiles(){
return map;
}
推荐- C++ 方式- 数组而不是向量,因为大小是编译时间常数(真正的 C++ 方式是使用std::unique_ptr<Tile>
而不是 Tile*,但一次 1 个问题。这些容器会自动为您管理内存,而 std::array 可以就像它是一个常规数组一样使用。
typedef std::array<std::array<Tile*,128>,128> TileGrid;
TileGrid map ;
...
TileGrid& GetTiles(){
return map;
}
通过引用返回以防止昂贵的副本,并且因为该函数只是一个 getter 并且对象维护map
.
编辑:修复了 getter 函数