在我的主窗口中,我创建了一个 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
}
我之前没有成功或问过错误类型的问题。
Delete pointer to multidimensional array in class through another pointer - how?
我可以访问该数组,检查它是否为NULL。但是当我调用delete / delete [] pointerClass-&gt; ArrayOfPointerObjects [x] [y]时,似乎删除了指向pointerClass的指针而不是[X] [Y]处的元素,我想删除位置处的指针[X ] [Y]而不是pointerClass,我不想删除整个数组。
如何在不使其复杂化的情况下完成此操作?我想我的数组不是一个指针数组,只是一个指向数组的指针。但我希望它是存储在指针或其他东西中的指针数组。重要的是我如何访问它以及如何删除数组中的元素。我需要能够检查指针是否为NULL以及是否能够删除单个PointerObject。
这一点的重要性在于我想:
如果与我的另一个主题有太多的混淆或相似,那是因为人们告诉我我不想要的东西,它引导了主题,这里更好地说明了它是如何工作的以及我希望它如何工作。< / p>
答案 0 :(得分:-1)
#include <iostream>
class Foo
{
int i_;
int j_;
public:
Foo(int i, int j) : i_(i), j_(j) {}
void print_coords()
{
std::cout << this << " (" << i_ << ',' << j_ << ')' << std::endl;
}
};
class Bar
{
public:
Foo *arr[5][5];
};
class Que
{
public:
void init(Bar *b)
{
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
b->arr[i][j] = new Foo(i, j);
}
void print(Bar *b, int i, int j)
{
try {
if(b->arr[i][j])
b->arr[i][j]->print_coords();
else
throw 0;
} catch (int e) {
std::cout << &b->arr[i][j] << " points to null" << std::endl;
}
}
void rem(Bar *b, int i, int j)
{
delete b->arr[i][j];
b->arr[i][j] = 0;
}
};
int main()
{
Bar *b = new Bar();
Que *q = new Que();
q->init(b);
q->print(b, 2, 2);
q->rem(b, 2, 2);
q->print(b, 2, 2);
return 0;
}