注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++智能指针的释放问题  

2014-11-05 22:18:33|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++智能指针的释放问题

测试一个数组程序时发现了一个小问题,就是在库函数中有一个数组,而数组的成员变量是一个对象,对象中一个属性是一个智能指针。类似下面的形式

Struct Data

{

         Std::share_ptr<Depart> dp;

};

 

Data Buf[1000];

然后就是不断的向这个数组中填充上面的结构体数据,然后最后会有一个memset的动作,这里就想当然的出现了一个问题,把智能指针的值赋值为0,指向的内存空间会不会被释放?需不需要强制去释放?

接口能不能对其进行控制。于是进行了一次验证。结果大大出乎意料,直接给0是不会主动释放内存空间,疏忽了,这就是应用新技术的一种代价吧。这与验证中4M内存没有释放基本吻合。

然后将循环继续扩大,增加了十倍,结果与想象仍然一致。这里又出现了一个现象,正好可以借机处理一下,什么现象呢?那就是普通指针和智能指针分配的速度和释放的速度。

将上面的测试中智能指针改成裸指针,测试基本情况如下:

智能指针分配:10       100

分配:       1515毫秒    14750

释放:       5860毫秒    64875

裸指针:

分配:        1297毫秒   53250

释放:        5765毫秒   65265

测试强度不大,所以得出来的未必正确,但是从上面的简单测试来看,智能指针的分配效率在数据量的情况下比裸指针要快一些,但中小数据量反而不高,但相差不明显。

双刃剑,考虑是不是直接使用数组变量,可是这里的要求又非常恶心,先这么操作。

  评论这张
 
阅读(421)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017