我必须从头开始吗?

时间:2010-05-20 10:24:56

标签: c++ arrays

如果我有:

std::size_t bagCapacity_ = 10;
std::size_t bagSize = 0;
A** bag = new A*[bagCapacity_];

while (capacity--)
{
  bag[capacity] = new A(bagSize++); //**here I'm loading this array from the end is it ok?**
}

还可以从数组末尾开始删除那些对象吗?

while (capacity--)
{
  delete bag[capacity];
}

代码中的问题。

7 个答案:

答案 0 :(得分:8)

here I'm loading this array from the end is it ok?

是的,没关系。你可以随意填写元素。

delete[] bag[capacity];

这段代码错了。 bag [capacity]的类型为A*,使用new而不是new[]进行分配,因此您不应该delete[]只应delete bag[capacity];删除个人A个对象。最后,您应该delete[] bag删除为行李分配的内存。

答案 1 :(得分:1)

没有强制命令来访问数组,所以你的代码很好。

答案 2 :(得分:1)

是的,一旦你分配了bag数组,你可以根据需要迭代它。数组的点可以在恒定的时间内随机访问。你做的很好。

答案 3 :(得分:1)

我不完全确定你是否需要一个A数组数组或一个A指针数组。如果你想要一个数组数组,那么你应该做

bag[capacity] = new A[bagSize++];

(注意方括号)但是代码看起来不错。但是,如果它是第二种情况(A指针数组),那么你应该只做

delete[] bag;

(即循环中没有删除[])。

答案 4 :(得分:1)

delete部分外,代码很好。它应该是delete bag[capacity];,因为您没有删除数组,而是一个A的实例,它是数组的成员。之后,您还应执行delete[] bag删除已分配的bag数组。

我想知道为什么要将bagCapacity_放在std命名空间中?也许你想在自己的命名空间中使用它?

答案 5 :(得分:0)

您的代码中有一部分特别令人不安:

std::bagCapacity_ = 10;

这似乎表明您正在bagCapacity命名空间中创建名为std的变量。除非我误解了这里发生了什么,否则这是严格禁止的 - 只有少数你可以添加到std命名空间的东西(主要是模板的特殊化)已经存在)。

我也想知道你在这里做什么。使用new[]几乎总是一个错误。你正在写的东西看起来像一个平庸的模仿vector,所以除非这是一个类命令的顺序,旨在教一些特定的(相当差的)技术,你可能会更好的问关于你实际想要完成什么,并获得关于这样做的好方法的建议。

答案 6 :(得分:0)

以任何顺序设置数组元素都是可以的。但是你缺少delete []操作!

相关问题