C++ 静态函数中释放内存的最佳方法

C++ 静态函数中释放内存的最佳方法,c++,matrix,C++,Matrix,这是一个正在工作的矩阵实现 我需要释放*数据的内存 但是readMatrix函数是静态的,所以我不能删除readMatrix中的数据。 readMatrix返回*m矩阵后,最好的方法是什么 Matrix.cpp #包括“Matrix.h” #包括 #包括 #包括 #包括 使用名称空间std; 矩阵::矩阵(inti,intj){ 行=i; cols=j; 数据=新浮点数[i*j]; } 矩阵::矩阵(常数矩阵和m){ 行=m行; cols=m.cols; data=m.data; } int矩阵

这是一个正在工作的矩阵实现

我需要释放*数据的内存

但是readMatrix函数是静态的,所以我不能删除readMatrix中的数据。 readMatrix返回*m矩阵后,最好的方法是什么

Matrix.cpp
#包括“Matrix.h”
#包括
#包括
#包括
#包括
使用名称空间std;
矩阵::矩阵(inti,intj){
行=i;
cols=j;
数据=新浮点数[i*j];
}
矩阵::矩阵(常数矩阵和m){
行=m行;
cols=m.cols;
data=m.data;
}
int矩阵::numRows(){
返回行;
}
int矩阵::numCols(){
返回cols;
}
浮点*矩阵::访问(常量int i,常量int j)常量{
返回和数据[((i*cols)+j)-1];
}
std::ostream&operator此处

Matrix::Matrix(const Matrix& m) {
    rows=m.rows;
    cols=m.cols;
    data=m.data;
}
如果使用裸浮点指针(请注意,它应该是一个
浮点**
),则会有更多实例指向相同的数据,当它们超出范围时,会多次删除相同的数据

在复制构造函数中需要做的是克隆数据。因为您有行/列,所以应该相当容易

现在谈谈你的问题

这里

...
matrixFile >> p[i][j];
*(m->access(i,j))= (float)p[i][j];
...
(请注意,您在末尾用const声明了access(float*access(const int i,const int j)const),这意味着上述赋值是非法的,方法后的const意味着实例不会受到影响,但您正在使用它为其赋值)

似乎没有必要,因为您一次读取一个浮点,只需使用一个浮点变量从文件中读取值,然后将该值分配给矩阵就足够了

...
matrixFile >> floatRead;
*(m->access(i,j))= floatRead;
...
所以,把整个p矩阵都扔了

Alt.读入p矩阵中的值,然后让矩阵实例m拥有它的所有权

e、 g


为什么要使用分配的指针?这就是为什么你有复制构造函数。因此,只需将
m
创建为非指针值即可。也可以读到。最后,一旦你实现了一个析构函数来删除
数据
指针,你的复制构造函数就不能很好地工作了。哦,还有一个一般提示,为什么不为数据设置一个
浮点
指针呢?或者如果你真的想要一个矩阵,那么为什么不在矩阵中使用一个
std::vector
?你不能在矩阵中使用
std::vector
?是用C++11吗?谢谢你的帮助..因为头文件是我们的教授提供的..@JoachimPileborg
...
matrixFile >> p[i][j];
*(m->access(i,j))= (float)p[i][j];
...
...
matrixFile >> floatRead;
*(m->access(i,j))= floatRead;
...
...
m->attachMatrixValues(p);
...