堆上对象和子对象的固定大小数组
Fixed-size array of objects and sub-objects on the heap
我搜索了又搜索,但没有找到任何能真正消除我困惑的东西。
我代表一个网格,有两个类,例如:
class Term {
...
};
class GridPoint{
Term a;
Term b;
Term c;
...
};
我想在堆上有一个固定大小的大数组,其中数组的每个元素都是一个GridPoint,它本身包含多个Terms。
但是,以下示例不会编译:
GridPoint* pGrid = new GridPoint[100][100];
根据gcc:
错误:无法在初始化中将"GridPoint(*)[100]"转换为"GridPoint*"
首先,我建议不要在现代C++中使用new
和delete
,而是使用智能指针或封装为std::vector
的标准库中的容器。
也就是说,为了让你的例子发挥作用,你必须在一个循环中初始化一个数组,如下所示:
GridPoint** pGrid = new GridPoint*[100];
for (std::size_t i = 0; i != 100; ++i) {
pGrid[i] = new GridPoint[100];
}
// Do something...
for (std::size_t i = 0; i != 100; ++i) {
delete[] pGrid[i];
}
delete[] pGrid;
要获得更好的替代方案,只需使用std::array
或std::vector
:
std::array<std::array<GridPoint, 100>, 100> pGrid;
注意:std::array
封装了一个用于存储数据的静态数组。这意味着,如果分配具有自动存储持续时间的std::array
对象,则不会动态分配其数据(数据不会在"堆"上)。
CCD_ 8将使用动态分配来存储其数据。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- C++将浮点指针值舍入为小数位数
- 是否需要删除包含对象的"pair"?
- "没有满足这些约束的较小数组对象"是什么意思?
- 如何在不使用默认构造函数的情况下通过new创建对象的动态大小数组
- 堆上对象和子对象的固定大小数组