String类的普通版本与简洁版本的深拷贝

2017-02-27 15:34 阅读 959 次 评论 0 条

什么是深拷贝?

深拷贝不同于浅拷贝,它在拷贝的时候会为新对象开辟一块新的内存空间,然后将原对象的内容拷贝到新开辟的空间,这样在资源释放的时候就不会牵扯到多次析构的问题。比如构造了S1与S2两个对象,在构造S2时拷贝一块跟S1指向数据库一样大的数据块,并将值拷贝下来,这样S1与S2指向各自的数据块,析构时也自然释放自己的数据块

源代码及注释(简洁版)

深拷贝的内存分析

①调用构造函数创建S1、S2、S3后,发现3个对象的地址完全不同,证明处于不同的内存空间中。

②调用三次析构函数,发现在释放的过程中遵循先入后出的原则,没有发生任何的内存泄漏或者程序奔溃问题。

普通版本的深拷贝

对于拷贝构造函数:开辟新空间,在进行内容的拷贝使其各有各自的空间以至于在析构的时候不至于程序运行崩溃。比如创建了S1、S2两个对象,构造S2对象时拷贝一块跟S1指向数据块一样大的数据块,并将值拷贝下来,这样S1、S2指向各自的数据块,析构时释放各自的数据块,因此就不会出现浅拷贝空间被多次析构的错误。但是美中不如的是,虽然深拷贝看起来较为容易的解决了字符串的拷贝,但是新开辟的空间无疑成为了资源的浪费。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:String类的普通版本与简洁版本的深拷贝 | 术与道的分享
分类:编程素养 标签:,
1024do.com导航_术与道导航平台

发表评论


表情