为什么我的这个程序拷贝构造函数没有效果啊
#include<iostream>
using namespace std;
class c{
public:
c(){p=new int;}
c(const c&);
void set(int a){*p=a;}
int get()const{return *p;}
private:
int*p;
};
c::c(const c&a)
{
if(a.p!=0)
{
p=new int;
*p=*(a.p);
}
else
p=0;
}
int _tmain(int argc, _TCHAR* argv[])
{
c c1,c2;
c1.set(1);
cout<<c1.get()<<"\n";
c2=c1;
c2.set(2);
cout<<c2.get()<<c1.get();
return 0;
}
最后一个输出的都是一样的,也就是说c2指向的对象c1是一样的 求高手帮我纠正一下
[解决办法]
c2=c1;
因为之前c2已经定义了,因此这一步没有调用拷贝构造函数,而是调用了operator=,你没有编写这个方法。所以系统用bitwise-copy的方式进行了处理。c1和c2的p指向了同一个内存空间。
c c1;
c c2 = c1;
这样才能调用拷贝构造,因为之前没有定义过。一般情况copy-ctor和operator=是需要同时定义的,否则就会出现这样的情况。另外,你的p没有进行释放,也会造成潜在问题。