c++,深拷贝构造函数与浅拷贝构造函数有什么不同

如题所述

 åå¯¹ä¸Šé¢çš„答案。综合介绍下面三种情形:

赋值

        å°†å¯¹è±¡ç›´æŽ¥ä½¿ç”¨ç­‰å·èµ‹å€¼ï¼Œåªæ˜¯è®©ç­‰å·çš„左值拥有右值的一个引用,相当于指针赋值一样。在这个过程中,没有新对象产生。

浅拷贝

        æµ…拷贝已经和赋值有着本质区别了。浅拷贝会在内存中创建一个新的对象,并将被拷贝的对象的所有数据成员都复制到新的对象中。

深拷贝

        æ‹·è´ç›¸å¯¹äºŽèµ‹å€¼ï¼Œå…¶ç›®çš„是产生和原来一样的新的对象。但是,即便使用了浅拷贝也不一定是彻彻底底和原来的对象独立了。考虑下面的情景下:

对象a的某数据成员X,是对象b的引用

        在这种情况下,假设我们使用浅拷贝对象a生成新对象aa,那么a.X和aa.X依然都是同一个b的引用。这是因为,浅拷贝只是给对象的所有数据成员进行了赋值操作,而对b的引用的赋值,正如上面所讲的,只是让新对象也拥有对b的引用,而没有继续拷贝对象b。

        å› æ­¤ï¼Œæ·±æ‹·è´å°±æ˜¯åœ¨è¿™ç‚¹ä¸ŠåŒºåˆ†äºŽæµ…拷贝的。当深拷贝在遇到引用数据成员时,不会只赋值引用,而是会拷贝一个新的。

        æ‰€ä»¥ï¼Œåœ¨ä¸Šé¢çš„情景下:

    使用浅拷贝时,a.X和aa.X是同一个b的引用

    使用深拷贝时,a.X是b的引用,而aa.X是由“b复制来的bb”的引用。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-09-10
深拷贝就是把另一个对象在内存里的数据全部复制到当前对象里
而浅拷贝就只是让当前对象有一个对另一个对象的引用而已本回答被提问者采纳
相似回答