在我之前的一个问题中,有人指出我的代码可能会泄漏内存。有人可以告诉我我的代码有什么问题,以便我可以学习和发展,如何解决?
班级成员:
Dimensions dimensions;
T *data;
ctor:
template<class T>
Matrix<T>::Matrix(const Dimensions &matrix_dimensions, const T &initial_value) : dimensions(matrix_dimensions),
data(new T[size()]) {
if (matrix_dimensions.getRow() <= 0 || matrix_dimensions.getCol() <= 0) {
throw IllegalInitialization();
}
int matrix_size = size();
for (int i = 0; i < matrix_size; ++i) {
data[i] = initial_value;
}
}
dtor:
template<class T>
Matrix<T>::~Matrix<T>() {
delete[] data;
}
注意:T可能是int,bool,string或自定义类,等等...
我如何使用上面的代码的示例:
Dimensions dims(2 ,4);
Matrix<int> mat_1(dims, 5);
Matrix<std::string> mat_2(dims,"Default");
提前感谢。
[一个简单的例子:想象size()
返回5
,matrix_dimensions.getRow()
返回0
。然后抛出IllegalInitialization
异常,并且不会删除数据。
即使在以上示例中size()
返回0
,也会调用data
的分配函数(以分配没有元素的数组)。而且那个永远不会被删除。
使用STL容器或注释中建议的std::unique_ptr
。甚至更好,请使用矩阵库。