所以我有这个指针数组
image* [] myArray;
我将数组中的对象复制到一个新的更大的数组中。
for (int i=0; i<maxObjects; i++){
newArray[i] = myImages[i];
}
for (int i=maxObjects; i<newMaxObjects; i++){
newArray[i] = NULL;
}
重点是调整我的数组大小。然后我删除myArray:
delete [] myArray;
其中,我假设从数组中删除对象,以及指向这些对象的指针。现在我想再次声明myArray
image* [] myArray;
并将其设置为指向我新的更大的数组。
myArray = newArray;
这是我迷路的地方:现在我有两个指向同一阵列的指针。 myArray指向与newArray相同的东西,对吧?或者,我错了,myArray现在指向newArray(指针),它指向我想要的对象?
我的主要问题:如何在不删除指向的数据的情况下删除临时指针myArray?另外,如何将myArray指针直接指定给数据,而不是指向另一个指针?我做得对吗还是有更好的方法来做我正在做的事情吗?
答案 0 :(得分:3)
您一定要查看STL(标准模板库)容器。这里有一个很好的资源:http://www.cplusplus.com/reference/stl/
例如,您可以使用矢量类来存储图像实例。只要需要更多空间,它就会自动增长。 它是这样的:
vector<image> imageVector;
imageVector.push_back(aImageInstance1);
imageVector.push_back(aImageInstance2);
这就是问题的c ++方法,让STL为你解决容器分配问题。
答案 1 :(得分:2)
你需要一个新的数组来保存指针。
image* [] myArray = new image* [...number of image* elements needed..];
for (int i=0; i<newMaxObjects; i++){
myArray[i] = newArray[i];
}
请参阅有关数组大小调整的文章:http://www.fredosaurus.com/notes-cpp/newdelete/55dynexample.html
答案 2 :(得分:1)
其中,我认为删除对象 从数组,以及指针 对那些对象。
不正确的;这只会删除为指针数组分配的空间,而不是它们指向的对象。但是,由于您已将这些数组移动到一个新的更大的数组,因此这不是问题。
指针和c风格的数组可能是一个棘手的主题,我认为图表是找出正在发生的事情的最好方法之一。你有myArray,它实际上是一个Image **
myArray's array The objects pointed to by the array.
myArray (Image**) -> myArray[0] (Image*) -> *(myArray[0]) (Image)
-> myArray[1] (Image*) -> *(myArray[1]) (Image)
-> myArray[2] (Image*) -> *(myArray[0]) (Image)
然后创建一个指向相同对象的新指针数组:
myArray's array The objects newArray's array
myArray (Image**) -> myArray[0] (Image*) -> *(myArray[0]) (Image) <- newArray[0] (Image*) <- newArray (Image**)
-> myArray[1] (Image*) -> *(myArray[1]) (Image) <- newArray[1] (Image*)
-> myArray[2] (Image*) -> *(myArray[0]) (Image) <- newArray[2] (Image*)
NULL <- newArray[3]
删除myArray时,只删除指针数组,让newArray指向底层元素:
The objects newArray's array
*(myArray[0]) (Image) <- newArray[0] (Image*) <- newArray (Image**)
*(myArray[1]) (Image) <- newArray[1] (Image*)
*(myArray[0]) (Image) <- newArray[2] (Image*)
NULL <- newArray[3]
当你做最后的myArray = newArray时,它们都指向同一个指针数组。这很好,只要你只删除其中一个。
答案 3 :(得分:0)
myArray被赋予与newArray相同的值,newArray是newArray的第一个元素的内存位置。在你说myArray = newArray;
之后,如果你将newArray分配给NULL,myArray仍将指向数据中心。
myArray = NULL;
只会重置指针。 delete [] myArray;
将释放您为指向数据的指针保存的内存,但不会删除实际数据。
在指针上使用间接运算符(*),该指针检索它指向的数据。 newerArray
将包含一组指向数据的指针。 newestArray
是数据的数组。
image* newerArray = new (image*)[size];
for (int i = 0; i < size; i++)
{
newerArray[i] = *(myArray[i]);
}
image newestArray = new image[size];
for (int i = 0; i < size; i++)
{
newestArray[i] = *(*(myArray[i]));
}