【问题标题】:allocate a new memory for matrix of objects为对象矩阵分配新内存
【发布时间】:2013-05-13 13:39:43
【问题描述】:

我有 Cars 类和对象(指向数字指针的指针):

Cars** arr;

我要分配新内存,怎么办?

类似:

arr = new Cars*[1]; // make one row
arr[0] = new Cars[10]; // make 10 cols

for (int i = 0; i < 10; ++i) {
    arr[0][i] = d; // d is a parameter of: Digits d;
}

我设置 rows = 1 因为我认为总是有 1 行。

请帮助我,因为我想我错过了一些东西..

【问题讨论】:

  • 是的,这似乎是正确的。虽然......“数字”是“汽车”的子类吗?如果没有,它将无法正常工作。
  • 使用 'vector' 代替......这样容易得多

标签: c++ object memory-management matrix


【解决方案1】:
arr = new Cars*[1]; // make one row
arr[0] = new Cars[10]; // make 10 cols
for (int i = 0; i < 10; ++i) {
   arr[0][i] = d; // d must be an object of Cars
}

由于arr 存储Cars 类型的元素,所以d 必须是Carsobject,或者可以转换为/查看为Cars 的对象。

您最好使用vector of vectors,这样更容易使用,而且您无需为动态数组的内存管理问题而烦恼。

【讨论】:

  • 为什么需要重命名数组?恐怕我看不出原因。
  • @ATaylor 我没有重命名它,因为OP在不同的地方使用了new_arr和arr,我将它们更改为使用相同的名称。更新:看来 OP 更新了帖子,所以我删除了那些更改名称的部分。
  • 啊,我明白了。我没有看到原版,所以我有点困惑。
【解决方案2】:

改为将其设置为 std::vector

std::vector<std::vector<Cars>> arr;
arr.resize(1); // make one row
arr[0].resize(10); // make 10 cols

for (int i = 0; i < 10; ++i) {
    arr[0][i] = d; // d is a parameter of: Digits d;
}

注意:d 必须是 Car。

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2021-12-20
    • 2017-10-07
    相关资源
    最近更新 更多