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

火车的家

Put first thing first

 
 
 

日志

 
 

2016.08.12 最近使用 c++ 11 的小结  

2016-08-12 18:00:55|  分类: 技术博客 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1. auto
此关键字为一占位符,其类型可由编译器上下文推导所得(deduce),一定要被初始化才能用,一些类型操作符不可以用之,如sizeof,typeid。

2. 智能指针
如今的智能指针十分强大,c++可以不用再显示的调用delete。

1)auto_ptr
比较弱智的智能指针,ownership不共享,多个auto_ptr指向同一个对象的话,crash。

2)shared_ptr的用法
先初始化,shared_ptr<T> the_ptr = std::make_shared<T>()
然后,内部凡是用到this的地方替换成shared_from_this(), http://en.cppreference.com/w/cpp/memory/enable_shared_from_this
可能产生循环引用的地方,使用weak_ptr

a)shared_ptr循环引用的问题;
下面是一段范例代码,test函数结束时,parent和children对象的引用都是1,所以内存泄漏,需要想想为什么引用计数是1。解决方法是一方换成weak_ptr。

#include <string>

#include <iostream>

#include <boost/shared_ptr.hpp>

#include <boost/weak_ptr.hpp>


class parent;

class children;


typedef boost::shared_ptr<parent> parent_ptr;

typedef boost::shared_ptr<children> children_ptr;


class parent

{

public:

    ~parent() { std::cout << "destroying parent\n"; }


public:

    children_ptr children;

};


class children

{

public:

    ~children() { std::cout << "destroying children\n"; }


public:

    parent_ptr parent;

};


void test()

{

    parent_ptr father(new parent());

    children_ptr son(new children);


    father->children = son;

    son->parent = father;

}


void main()

{

    std::cout << "begin test...\n";

    test();

    std::cout << "end test.\n";

}


b)weak_ptr的用法。
expired用来检查对象是否过期,lock用来产生一个shared_ptr访问指向的对象。该接口的*和->都没有被重载。

*3)shared_ptr的对象管理底层是怎么实现的?可以用vc debug

*3. lamda机制
短小精悍的匿名函数机制,十分方便,还要进一步研究。

4. lock_guard
用来管理锁非常方便

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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