C++ 对象克隆关键点
類(lèi)具有默認(rèn)的拷貝構(gòu)造函數(shù)(什么是拷貝構(gòu)造函數(shù)不清楚的自行百度),以下兩種情況需要分來(lái)討論:
1.類(lèi)的成員變量均為值類(lèi)型,即,沒(méi)有成員在堆中開(kāi)辟地址(沒(méi)有指針類(lèi)型的成員);
這種情況下,我們只需要利用類(lèi)的默認(rèn)拷貝構(gòu)造函數(shù)即可克隆一個(gè)新的對(duì)象出來(lái),
例如已存在一個(gè)對(duì)象Person p1;
通過(guò) Person p2(p1); 即可調(diào)用默認(rèn)拷貝構(gòu)造函數(shù)產(chǎn)生一個(gè)新的對(duì)象或者說(shuō)變量p2;
p1和p2的內(nèi)存地址不同,是兩個(gè)變量
根據(jù) Person p2 = p1; 可達(dá)到相同的效果,此方式同樣會(huì)依賴(lài)拷貝構(gòu)造函數(shù);
2.類(lèi)的成員變量中,有指針(即在堆內(nèi)存中開(kāi)辟空間的變量),此時(shí)調(diào)用默認(rèn)拷貝構(gòu)造函數(shù)不能深拷貝該成員變量(深拷貝和淺拷貝不明白的自行百度),需要重寫(xiě)拷貝構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)。
場(chǎng)景:
基類(lèi)Animal,子類(lèi)cat和dog
要實(shí)現(xiàn)多態(tài)拷貝,可在Animal中定義純虛函數(shù)virtual Animal* clone() = 0;
細(xì)節(jié):clone函數(shù)的返回類(lèi)型一定要是指針,普通指針和智能指針shared_ptr/unique_ptr均可,因?yàn)樽宇?lèi)重寫(xiě)該函數(shù)時(shí),需要通過(guò)協(xié)變返回類(lèi)型返回函數(shù)變量,只有指針支持協(xié)變返回類(lèi)型,具體可參考:關(guān)于c ++:如何在純抽象類(lèi)中實(shí)現(xiàn)克隆? | 碼農(nóng)家園
總結(jié)
以上是生活随笔為你收集整理的C++ 对象克隆关键点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Telerik DevCraft Ult
- 下一篇: 领英开发外贸客户新方式—领英精灵