首页 > 编程语言 > 详细

C++Primer 第十二章

时间:2016-06-15 23:44:59      阅读:199      评论:0      收藏:0      [点我收藏+]
//1.标准库提供了两种智能指针类型来管理动态对象,均定义在头文件memory中,声明在std命名空间。
//  shared_ptr:允许多个指针指向同一个对象。
//  unique_ptr:独占所指的对象。
//  标准库还定义了weak_ptr的伴随类,它是一种弱作用。指向shared_ptr所管理的对象。
    
//2.shared_ptr和unique_ptr均支持的操作:
shared_ptr<T> sp
unique_ptr<T> up:空智能指针,指向类型为T的对象
p               :将p用作一个判断条件,若p指向一个对象,则为true
*p, p->men     :得到p所指向的对象
p.get()         :返回p中保存的指针。
swap(p, q) 
p.swap(q)       :交换p和q的指针       

//3.shared_ptr独有的操作:
make_shared<T>(args) :返回一个shared_ptr,指向一个动态分配的类型为T的对象。使用args初始化此对象。是安全的分配和使用动态内存的方法。其本身也是一个模板。
shared_ptr<T> p(q)   :p是q的拷贝,此操作会递增q的计数器,q中的指针必须能转为T。
p = q                :p和q都是shared_ptr,p的指针必须能指向q所指的对象,此操作会递减p的引用计数,递增q的引用计数。当p的引用计数变为0的时候则释放其管理的内存。
                     shared_ptr<const int> pInt(new int(10));
                     shared_ptr<int> pInt1;
                     pInt1 = pInt;    //错误
                     pInt = pInt1;   //正确
p.unique()           :若p的引用计数为1,则返回true,否则返回false
p.use_count()        :可能很慢,主要用于调试,返回与p共享对象的智能指针的数量

//4.当在容器中使用了shared_ptr,当不在需要容器中的全部元素的时候,记得用erase删除不在需要的元素。

//5.new和delete:
1.在自由空间分配的内存是无名的,因此new无法为其分配的对象命名,而是返回一个指向该对象的指针。
2.默认情况下,动态分配的对象是默认初始化的。
3.可以采用直接初始化或值初始化的方式,方法是使用()。直接初始化:int *pValue = new int(10); 值初始化:int *pValue = new int();
4.默认情况下,new失败时候会抛出bad_alloc异常。使用定位new可以避免抛出异常:int *pValue = new (nothrow)int;当分配内存失败的时候,pValue将是一个空指针。nothrow定义在头文件new中,声明在命名空间std中。
5.传递给delete的指针必须是动态分配的指针或者是空指针。多次释放相同的指针的行为是未定义的。
6.在使用了delete的时候,最好将被操作的指针置空。

//6.可以new返回的指针来直接初始化shared_ptr,此构造函数是explicit的,所以只能采用直接初始化的方式。

 

C++Primer 第十二章

原文:http://www.cnblogs.com/szn409/p/5589264.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!