对C++要求在二维数组中传递维度的烦恼让我开始了一个模板化的Matrix类。我一直在用C#编写代码,所以我确信我在这里有点生疏。删除模板化的C++二维数组
问题是,只要我点击析构函数,试图删除二维数组,就会得到一个堆异常。
任何帮助感激地接受!
template <typename T>
class Matrix {
public:
Matrix(int m, int n) : nRows(m), nCols(n) {
pMatrix = new T * [nRows];
for (int i = 0; i < nCols; i++) {
pMatrix[i] = new T[nCols];
}
}
~Matrix() {
if (pMatrix != NULL) {
for (int i = 0; i < nRows; i++) { delete[] pMatrix[i]; }
delete[] pMatrix;
}
}
T ** GetMatrix() const { return pMatrix; }
T * Row(int i) const { return pMatrix[i]; }
inline T Cell(int row, int col) const { return pMatrix[row][col]; }
inline int GetNRows() const { return nRows; }
inline int GetNCols() const { return nCols; }
private:
int nRows, nCols;
T ** pMatrix;
};
代码似乎不错。 – Healer
为什么你需要返回'T **'和'T *'?对我来说,这似乎暴露了内部实现细节。你可以通过使用一个'std :: vector'并使用索引来访问来简化代码。 – juanchopanza
完全同意胡安。通过使用'std :: vector <>'和一个简单的'i * cols + j'来获取'[i] [j]'元素,可以使*显着更简单。您唯一会遗漏的是能够执行双括号解引用,甚至可以用返回行迭代器的创意子类来征服。 – WhozCraig