通过另一个指针删除指向类中多维数组的指针 - 如何?

Deu*_*ion 1 c++ pointers class multidimensional-array delete-operator

我有一个指向类的指针,它有一个指向多维数组的指针但我似乎无法在需要时将其从内存中删除或将其设置为NULL.

#define X 10
#define Y 10

struct TestClass
{
public:
       int      *pArray[X][Y];
};


// different tries, none working:

delete Pointer_To_TestClass->pArray[0][0];
delete[] Pointer_To_TestClass->pArray[0][0]

// or by simply:

Pointer_To_TestClass->pArray[0][0] = NULL;
Run Code Online (Sandbox Code Playgroud)

我知道数组有数据,因为我可以在屏幕上看到结果.还检查它是否已经为NULL,然后不尝试删除它.

因为我想删除另一个指针中的指针 - 这是一个特殊情况,它的工作方式不同吗?就像它删除第一个指针而不是指针内的指针(pArray是第二个指针,Pointer_To_Testclass是第一个指针)

UPDATE /解释

我希望能够删除pArray [0] [0],而pArray [0] [1]仍然存在,如果[0] [0]不存在,它应该等于NULL.大多数是因为我想通过[X] [Y]值访问此数组以便于访问.如果[0] [0]是一个指针,它在删除时应为NULL,所以我可以检查它是否为NULL.

有人有什么想法吗?

Jer*_*fin 6

如果你想要一个2D数组指针<whatever>,创建一个类来处理它,然后将它的实例放在你的TestClass中.至于如何做到这一点,我通常会在这个顺序上使用一些东西:

template <class T>
class matrix2d {
    std::vector<T> data;
    size_t cols;
    size_t rows;
public:
    matrix2d(size_t y, size_t x) : cols(x), rows(y), data(x*y) {}
    T &operator()(size_t y, size_t x) { 
        assert(x<=cols);
        assert(y<=rows);
        return data[y*cols+x];
    }
    T operator()(size_t y, size_t x) const { 
        assert(x<=cols);
        assert(y<=rows);
        return data[y*cols+x];
    }
};

class TestClass { 
    matrix2d<int *> array(10, 10);
public:
    // ...
};
Run Code Online (Sandbox Code Playgroud)

但是,鉴于您正在存储指针,您可能需要考虑使用Boost ptr_vector而不是std::vector.