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

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++11及BOOST特性之六智能指针和std::move  

2014-01-10 17:04:19|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++11BOOST特性之六智能指针和std::move

小模块上用一个智能指针的链表,想到了原来看资料说make_shared这个效率高,就直接用了他,结果忧伤的挂了。

         std::lock_guard<std::mutex> lk(this->_dataMutex);

         std::shared_ptr<PeopleNode> pTemp = std::make_shared<PeopleNode>(new PeopleNode());

         this->_peopleData.push_back(pTemp);

报得错误:

error: no matching function for call to.,后来又报没有这个匹配的构造函数,一看才明白,原来自己看错了人家的例程,

正确的改为:

         std::lock_guard<std::mutex> lk(this->_dataMutex);

         std::shared_ptr<PeopleNode> pTemp = std::make_shared<PeopleNode>();

         this->_peopleData.push_back(pTemp);

如果构造函数有参数的话,可以在:

std::make_shared<PeopleNode>(36);

那么和一般的使用:std::shared_ptr<PeopleNode> p(new PeopleNode());

这两种方式有什么区别呢?网上的资料说是前者的效率要高,前者一次分配内在,后者搞再次,对这个源码没有认真看过,还真是不太清楚。

http://www.cnblogs.com/egmkang/archive/2013/04/28/3049102.html

看上面的说明。

另外此处还可以使用std::move

std::shared_ptr<Temp> p    (std::make_shared<Temp>(std::move(ttt)));

注意,这个ttt是一个变量而不是一个指针。

这么用,一开始还怕给一个临时变量无法使用,可以经过测试没有问题的。

std::shared_ptr<Temp> pTemp;

void testTemp(Temp p)

{

    //下面注释的部分是没问题的,但是未注释的则数据不正确

         //pTemp = std::make_shared<Temp>(std::move(p));

         pTemp = std::shared_ptr<Temp>(&p);

}

void testData()

{

         Temp pData(12,19);

         testTemp(pData);

}

int _tmain(int argc, _TCHAR* argv[])

{

         testData();

         int tData = pTemp->tt;

}

 

还是一些起细节需要引起注意。

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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