首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么小弟我的这个程序拷贝构造函数没有效果

2013-01-04 
为什么我的这个程序拷贝构造函数没有效果啊#includeiostreamusing namespace stdclass c{public:c(){p

为什么我的这个程序拷贝构造函数没有效果啊
#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没有进行释放,也会造成潜在问题。

热点排行