String类的简单赋值浅拷贝的内存分析

2017-02-25 14:34 阅读 468 次 评论 0 条

什么是浅拷贝?

浅拷贝,也称位拷贝,编译器只是直接将指针的值拷贝过来,结果多个对象共用了同一块内存空间,当一个对象将这块内存释放掉之后,另一些对象不知道该块空间是否已经归还给系统,以为还有效,所以在对这段内存进行操作的时候,发生了访问违规。

源代码及注释

开辟空间、释放资源分析

①首先根据创建的对象进行开辟空间。

②在对对象依次进行释放资源时,根据县入后出的顺序依次释放,但是,结果是造成了同时释放,因为共用同一块内存,造成对象成员全部释放。

③当S3调用析构函数释放之后,共用的空间已经释放,当程序再次调用析构函数释放S2时,程序也必将奔溃,因为不能对同一块空间释放多次。

⑤给出地址空间图,方便大家理解

浅拷贝问题总结

①浅拷贝只是拷贝了指针,使得两个指针指向同一个地址,这样在对象块结束,调用函数析构的时候,会造成同一份资源析构多次,即delete同一块内存多次,造成程序崩溃。

②浅拷贝使得S1、S2和S3指向同一块内存,任何一方的变动都会影响到另一方。

③在释放内存的时候,会造成原有的内存没有被释放也不走默认构造函数,走的是默认的拷贝构造函数,造成内存泄露。

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

发表评论


表情