#include <iostream>
class Matrix {
private:
int rows;
int cols;
int** data;
public:
Matrix() : rows(3), cols(3) {
data = new int*[rows];
for (int i = 0; i < rows; ++i) {
data[i] = new int[cols];
for (int j = 0; j < cols; ++j) {
data[i][j] = (i == j)? 1 : 0;
}
}
}
~Matrix() {
for (int i = 0; i < rows; ++i) {
delete[] data[i];
}
delete[] data;
}
};
内存管理问题阐述
- 动态内存分配:在构造函数中,为
data
分配了一个二维动态数组。首先为data
分配了rows
个指针,然后为每个指针分配cols
个int
类型的空间。这种双重动态分配需要确保在对象销毁时正确释放内存,以避免内存泄漏。
- 内存释放:在析构函数中,先释放每一行的内存(
delete[] data[i]
),然后释放data
本身(delete[] data
)。如果遗漏了任何一个释放步骤,都会导致内存泄漏。特别是如果在分配内存过程中出现异常,需要确保已分配的内存能够正确释放,这通常可以通过智能指针来更好地管理,以简化内存管理并确保异常安全。