在我的主窗口中,我创建了一个PointerClass的实例,它包含一个指向PointerObject的指针数组(我希望能够使用PointerObject[X][Y]访问它并以相同的方式删除它,并检查PointerObject[X] [Y] == NULL(这就是我使用指针的原因))并且我不想要带有向量的解决方案。
#define X 10
#define Y 10
class PointerObject
{
public:
int X;
int Y;
}
class PointerClass
{
public:
PointerObject *ArrayOfPointerObjects[X][Y];
}
PointerMethod(&PointerClass);
然后,在我的 PointerMethod 中创建指向数组的指针:
PointerMethod(PointerClass *pointerClass)
{
// don't know the right way to do this
pointerClass->ArrayOfPointerObjects= new PointerObject[X][Y];
// set all pointers in the array to NULL - is this needed?
for (int x=0; x < X; x++)
{
for (int y=0; y < Y; y++)
{
pointerClass->ArrayOfPointerObjects[x][y] = NULL;
}
}
// trying to store some data here
pointerClass->ArrayOfPointerObjects[0][0] = new PointerObject;
// trying to delete it
delete pointerClass->ArrayOfPointerObjects[0][0];
// or trying this:
delete[] pointerClass->ArrayOfPointerObjects[0][0];
// causes access violation or doesn't work
}
我之前问过这个没有成功或关于错误类型的问题。
我可以访问数组,检查它是否为 NULL。但是当我调用 delete / delete[] pointerClass->ArrayOfPointerObjects[x][y] 时,它似乎删除了指向指针类的指针而不是 [X][Y] 处的元素,我想删除位置 [X] 处的指针[Y] 而不是指针类,我不想删除整个数组。
我怎样才能做到这一点而不会太复杂?我猜我的数组并不是真正的指针数组,只是指向数组的指针。但我希望它是存储在指针或其他东西中的指针数组。仍然重要的是我如何访问它以及如何删除数组中的元素。我需要能够检查指针是否为 NULL,如果不能删除该单个 PointerObject。
这样做的重要性在于我想要:
- 使用 [X][Y] 访问 PointerObjects 数组
- 检查数组中的对象是否为 NULL(=需要指针)
- 删除指针数组中的单个项目,而不破坏指向 PointerClass 对象的指针或删除数组的其余部分。只需删除数组中某个 X、Y 位置的单个 PointerObject,以便删除后的 [X][Y] = NULL。
如果与我的其他线程有太多的混淆或相似之处,那是因为人们告诉我我不想要的东西并且它导致了主题,这里更好地说明了它是如何工作的以及我希望它如何工作。