如果我有:
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];
}
代码中的问题。
答案 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 []操作!