首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于浅拷贝和深拷贝的讨论解决办法

2012-03-29 
关于浅拷贝和深拷贝的讨论1、浅拷贝的危险之出在于有可能导致内存的二次释放从而造成异常,深拷贝则避免了这

关于浅拷贝和深拷贝的讨论
1、浅拷贝的危险之出在于有可能导致内存的二次释放从而造成异常,深拷贝则避免了这一情况的发生。但“万恶”的浅拷贝就无一点好处,而深拷贝就无一个缺点吗?

2、在C++中需要时刻考虑这一隐晦的问题,在C#中有没有一种机制能够避免或解决这类问题呢?正如C#的垃圾回收机制,避免了C\C++中“圈地不还”情况的发生。


[解决办法]
1、浅拷贝的危险之出在于有可能导致内存的二次释放从而造成异常,深拷贝则避免了这一情况的发生。但“万恶”的浅拷贝就无一点好处,而深拷贝就无一个缺点吗?


如果一个类里面没有指针类型的数据成员的话,完全可以用浅拷贝啊,这样很方便,省去了写一个拷贝构造函数


2、在C++中需要时刻考虑这一隐晦的问题,在C#中有没有一种机制能够避免或解决这类问题呢?正如C#的垃圾回收机制,避免了C\C++中“圈地不还”情况的发生。

C#不懂啦,但JAVA中好像也可以自动回收那些用户忘了回收的内存,避免内存的泄露
[解决办法]
我觉得它们的最本质的在于如何维护对资源的所有。我们可以感觉到,如果一个类拥有某种资源的话(内存/句柄/文件...)都会存在 "浅 "和 "深 "的问题,它们之间应该并不存在孰优孰劣的问题,问题的关键在于类的设计者如何设计对资源的维护:
1.资源可以从这个用户转到另外一个用户;
2.资源可以复制一份,每个用户都可以拥有自己的资源;
3.资源可以在多个用户之间共享;
4.....
上面几种情况都有存在的应用,所以具体使用那种方式完全决定于具体的问题。

热点排行