中易网

简单的C++拷贝类构造函数问题

答案:2  悬赏:0  
解决时间 2021-03-14 18:59
下面是一个简单的拷贝类构造函数: clock::clock(clock &c1) { h=c1.h; cout<<"。。。。。。。。。。"<<endl; } 如果clock c(1),b=c;运行后会输出"。。。。。。。。。。" 如果clock c(1),b;b=c;运行后不会输出"。。。。。。。。。。" 为什么?
最佳答案
拷贝构造函数多被用来实现类对象的深拷贝。

例如:
class A
{
private:
char *p;
public:
A()
{
p=new char[10];
}
}

不定义拷贝构造函数时,你如果对两个对象赋值,就会是浅拷贝,即:简单的成员变量相等。
A a,b;
a=b;
则,相当于作了a.p=b.p,a,b的p指针指向了同一个地址,但是数据并没有拷贝一份,这叫做浅拷贝。

所以定义拷贝构造函数:
A(A& a)
{
p=new char[strlen(a.p)+1];
strcpy(p,a.p);
}

然后再作a=b或者A a(b),作的就是上面函数了,p就有a.p,b.p两个数据拷贝,不至于在释放时一个空间被释放两次。

拷贝构造函数在大多数情况下就用来做这种事。

所以如果没有指针变量,一般就不需要自己定义拷贝构造函数。因为系统默认的拷贝构造函数可以实现浅拷贝。而一般常量(只要不是指针),浅拷贝和深拷贝效果一样。
全部回答
问题: 如果clock c(1),b=c;运行后会输出"。。。。。。。。。。" 如果clock c(1),b;b=c;运行后不会输出"。。。。。。。。。。" 回答: 情况1: clock c(1) //调用clock::clock c(int) 情况2: clock c(1) clock b=c; //调用clock::clock c(clock &t) 初始化的赋值是调用复制构造函数 情况3 clock c(1),b; b=c; //调用clock operator = (clock &t1, clock &t2) 或者 clock clock ::operator =(clock &t) //这里就没有调用构造函数了 输出就不用详细说了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
钱隆世家-地下停车场在哪里啊,我有事要去这
应用内存是什么意思,可以删除吗?
微信涨粉宝是什么?
哪种水果树不怕地湿
我的女朋友说要冷静一下,给几天时间她好好想
咖嚓吉必鲁固茶馆地址在什么地方,想过去办事
故意违约算什么罪?如果判刑是久?
年少的心难免轻狂作文600字
上海致真国际旅行社有限公司地址有知道的么?
镇江中山医院口碑好吗
irene 朴宝剑什么时候开始主持音乐银行
这是两千年前的东西,请问这个值多少钱呢?
通过工行个人网上银行如何办理网点预约业务?
中国移动(黎明大药房)怎么去啊,我要去那办事
一个人的照片怎么做出两个人
推荐资讯
贵州师范大学2000年校长是谁
课堂教学中 ,学生的学习方法有哪些
LICENSE CODE 是什么意思
壳牌汽车机油油耗表现怎样?
我家田租给别人,现在打成水泥地坪怎么恢复种
大四平时都干什么呢?还住校吗?
中职生语文24课廉颇蔺相如列传文言文翻译
新日的小龟王电动车怎么官网查不到?
尚品轩名酒名茶我想知道这个在什么地方
women‘s是读威门斯还是威民斯?
去香港旅游…不跟团…
在英国坐飞机去米兰 行李需要买票吗 怎么听说
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?