【发布时间】:2014-01-29 14:34:05
【问题描述】:
我在课堂上遇到了运算符 = 的问题。这是简化的代码:
类:
#include <iostream>
using namespace std;
class Mat{
private:
int *m1;
int *m2;
unsigned rows;
unsigned cols;
void write(unsigned r_max, unsigned c_max){
m1 = new int [r_max*c_max];
for(unsigned i = 0; i < r_max*c_max; i++){
m1[i] = i;
}
}
public:
Mat():
rows(1), cols(1){
m1 = new int [1];
m1[0] = 0;
m2 = new int [1];
m2[0] = 0;
}
Mat(unsigned r, unsigned c):
rows(r), cols(c){
write(rows, cols);
m2 = new int [rows*cols];
for(unsigned i = 0; i < rows*cols; i++)
m2[i] = 0;
}
Mat &operator=(const Mat &w){
int *new_ptr1 = NULL;
new_ptr1 = new int [w.rows*w.cols];
int *new_ptr2 = NULL;
new_ptr2 = new int [w.rows*w.cols];
for(unsigned i = 0; i < w.rows*w.cols; i++){
new_ptr1[i] = w.say_m1(i);
new_ptr2[i] = w.say_m2(i);
}
delete[] w.m1;
delete[] w.m2;
m1 = new_ptr1;
m2 = new_ptr2;
rows = w.rows;
cols = w.cols;
return *this;
}
int say_m1(unsigned i) const{ return m1[i]; }
int say_m2(unsigned i) const{ return m2[i]; }
~Mat(){
delete[] m1;
delete[] m2;
}
};
这是我需要做的主要事情:
#include "Mat.cpp"
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char **argv){
Mat a;
Mat b(20, 20);
a = b;
return 0;
}
我认为问题出在我重载运算符的类中 = 我不知道如何将右对象数据复制到左对象数据中,我也不确定我是否正确删除...
【问题讨论】:
-
您需要告诉我们出了什么问题。它崩溃了吗?您是否担心内存泄漏?
-
在 g++ 下编译干净。真正的问题是什么?
-
@πάνταῥεῖ:或者更好的是,零规则。如果您使用
std::vector而不是手动处理数组,则该类将自动分配。 -
@MikeSeymour 通常,提出此类问题的可怜人不允许使用
std::string或其他他们'还没有学过'的东西。