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 ++:如何在纯抽象类中实现克隆? | 码农家园

相关内容

热门资讯

原创 哈... 10月11日,哈马斯高层在一声惊雷般的宣布中,选择了放弃对加沙的统治权。这是一个充满戏剧性的转折,放...
原创 阿... 最近,一场关于大豆的国际戏码正在南美和北美之间上演,引发了全球目光的聚焦。从南美洲的田野到华盛顿的会...
原创 球... 烽火戏诸侯,终究是要付出代价的。最近,勒布朗詹姆斯玩火自焚,真的拦不住。或许,就像丹尼格林所说的那样...
因不正当竞争纠纷,中顺洁柔起诉... 天眼查APP显示,近日,中顺洁柔纸业股份有限公司新增一则开庭公告,案由为“不正当竞争纠纷”,原告为中...
黄思被查 湖北武汉市纪委监委10月12日晚消息,武汉市城市建设投资开发集团有限公司党委委员、副总经理黄思涉嫌严...
不要捡!不要吃!昆明街头正大量... 寒露过后 在昆明街头 经常会看到掉落一地的银杏果 很多人认为它营养丰富 将其捡回家食用 注意! ...
原创 湖... 勒布朗詹姆斯之前发布了一个题名为“第二个决定”的视频,引发了整个篮球圈的关注。大部分球迷媒体,因为不...
住建部重磅发声!“十五五”仍要... 本报(chinatimes.net.cn)记者刘诗萌 北京报道 过去的五年,是中国房地产市场供求关系...
因侵害商标权纠纷,上海家化起诉... 天眼查APP显示,近日,上海家化联合股份有限公司新增一则开庭公告,案由为“侵害商标权纠纷”,原告为上...
有韩国大学生被犯罪团伙折磨致死... 据参考消息援引韩联社10月12日报道,韩国总统李在明11日就柬埔寨接连发生针对韩国公民的招聘诱骗、绑...