C++ 对象克隆关键点
创始人
2024-02-15 12:05:44
0

类具有默认的拷贝构造函数(什么是拷贝构造函数不清楚的自行百度),以下两种情况需要分来讨论:

1.类的成员变量均为值类型,即,没有成员在堆中开辟地址(没有指针类型的成员);

这种情况下,我们只需要利用类的默认拷贝构造函数即可克隆一个新的对象出来,

例如已存在一个对象Person p1;

通过 Person p2(p1); 即可调用默认拷贝构造函数产生一个新的对象或者说变量p2;

p1和p2的内存地址不同,是两个变量

根据 Person p2 = p1; 可达到相同的效果,此方式同样会依赖拷贝构造函数;

2.类的成员变量中,有指针(即在堆内存中开辟空间的变量),此时调用默认拷贝构造函数不能深拷贝该成员变量(深拷贝和浅拷贝不明白的自行百度),需要重写拷贝构造函数来实现。

场景:

基类Animal,子类cat和dog

要实现多态拷贝,可在Animal中定义纯虚函数virtual Animal* clone() = 0;

细节:clone函数的返回类型一定要是指针,普通指针和智能指针shared_ptr/unique_ptr均可,因为子类重写该函数时,需要通过协变返回类型返回函数变量,只有指针支持协变返回类型,具体可参考:关于c ++:如何在纯抽象类中实现克隆? | 码农家园

相关内容

热门资讯

小米、华为、理想等车企报警!山... 近日,烟台公安历时四个月,打掉一个炒作新能源汽车负面信息的团伙,一举抓获12人、查扣资金百万、关停账...
重大改革,身关14亿人的政策彻... 中央经济工作会议结束后,各执行部委一系列的发布会和相关配套政策接踵而至,可以看出,今年是大变的一年。...
构建“人民至上”为核心理念的红... □ 李欣栩 坚持人民至上是“十五五”时期经济社会发展必须遵循的重要原则之一。中国红十字会是党和政府在...
人大聚力 以法治推进改革(坚持... 本报记者 张 璁 图①:海南三亚国际免税城俯瞰。 新华社记者 郭 程摄 图②:一批来自国外的产品抵...
特朗普周三将发表全国讲话 或预... 来源:环球市场播报 美国总统唐纳德·特朗普表示,他将于周三晚黄金时段发表全国演讲,这是在民调显示公众...
广田集团[002482]关于累... 本版导读 2025-12-18 2025-12-18 2025-12-18 2025...
“乌克兰国际索赔委员会”成立,... 【环球时报驻俄罗斯特派记者 肖新新】据乌通社等媒体16日报道,35个国家和欧盟16日在荷兰海牙签署公...
做实公益诉讼 守护峡江文脉(法... 本报记者 姜 峰 图①:重庆市忠县人民检察院检察官现场查看石宝寨寨门。 张海波摄 图②:重庆市巫溪...
法院:驳回诉讼请求 员工举报上司职场霸凌反被起诉侵犯名誉权 法院:驳回诉讼请求 员工向公司领导、同事发送邮件举报上司职...