这个C++源程序,为什么在不同的IDE上调试结果不同?
发布网友
发布时间:2024-09-26 19:58
我来回答
共1个回答
热心网友
时间:2024-12-02 14:06
你的动态分配有问题,主要是错在深拷贝的构造函数和重载的赋值运算符上了,不同环境下对这些错误容忍度不同,以下是改了的:
#include<iostream>
using namespace std;
class List {
private:
double *node;
int *size;
public:
List() { node=new double(0); size=new int(0); }
List(double *x)
{
node = new double(*x);
size=new int(0);
}
List(const List &x) {
cout << "拷贝构造函数" << endl;
node=new double(*x.node);
size=new int(*x.size);
}
~List() {
cout << "析构函数" << endl;
delete node;
delete size;
}
void output() const {
cout << "node = " << *node << "\tsize = " << *size << endl;
cout << "adress " << (void*)node << "\taddress " << (void*)size << endl;
}
List operator = (const List &x) {
//*node=*x.node;
//*size=*x.size;
delete node;
delete size;
node = new double(*x.node);
size = new int(*x.size);
return *this;
}
};
int main() {
double a=9;
List la(&a),lb;
la.output();
lb.output();
cout << "即将调用拷贝构造函数" << endl;
lb=la;
cout << "已调用拷贝构造函数" << endl;
la.output();
lb.output();
return 0;
}追问谢谢啊,我把带有double*形参的构造函数改了一下就可以了,能请问一下吗?为什么在重载赋值运算符的时候还要重新申请内存呢?不申请不是也可以吗?
追答不申请直接赋值的话,被赋值的对象原先的空间就丢失了,就是所谓的内存泄漏,并且此时,由于两个指针指向同一块空间,析构时会产生释放两次的错误,也许你的运行环境比较容忍这个错误没有报错