ctor中潜在的内存泄漏?

问题描述 投票:2回答:1

在我之前的一个问题中,有人指出我的代码可能会泄漏内存。有人可以告诉我我的代码有什么问题,以便我可以学习和发展,如何解决?

班级成员:

    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");

提前感谢。

c++ class generics methods typedef
1个回答
0
投票

[一个简单的例子:想象size()返回5matrix_dimensions.getRow()返回0。然后抛出IllegalInitialization异常,并且不会删除数据。

即使在以上示例中size()返回0,也会调用data的分配函数(以分配没有元素的数组)。而且那个永远不会被删除。

使用STL容器或注释中建议的std::unique_ptr。甚至更好,请使用矩阵库。

© www.soinside.com 2019 - 2024. All rights reserved.