标签:
一、动态内存与智能指针
1、new:在动态内存中为对象分配空间并返回一个指向该对象的指针;delete:接受一个动态对象的指针,销毁该对象,并释放与之关联的内存
2、两种指针:shared_ptr和unique_ptr;还有一个weak_ptr;都定义在memory中
二、shared_ptr类:智能指针也是模板,需要提供指向的类型
1、一个条件判断中使用智能指针,效果就是检测它是否为空
2、最安全的分配和使用动态内存的方法是调用make_shared的标准库函数
auto p = make_shared<int>(42);
3、使用动态内存的原因三个
4、对动态分配的对象进行初始化通常是个好主意:定义的时候就初始化
5、不能将一个内置指针隐式转换为一个智能指针,必须使用直接初始化形式
shared_ptr<int> p(new int(1024));
6、不要混用普通指针和智能指针,除非我们需要向不能使用智能指针的代码传递一个内置指针
7、避免智能指针陷阱
shared_ptr<connection> p(&c, end_connection);
三、unique_ptr类
1、定义一个unique_ptr时,必须绑定到一个new返回的指针上,且必须采用直接初始化形式
unique_ptr<int> p(new int(42));
2、unique_ptr拥有它指向的对象,因此unique_ptr不支持普通的拷贝或赋值操作,但有两个例外
3、可以通过release或reset将指针的所有权从一个非const的unique_ptr转移到另一个unique
4、向unique_ptr传递删除器,必须在尖括号中类型后,提供删除器类型:这里与shared_ptr的删除器不同
unique_ptr<objT, delT> p (new objT, fcn);
四、weak_ptr:将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。最后一个指向对象的shared_ptr被销毁,对象就会释放
if(shard_ptr<int> np = wp.lock()) { ... }
五、动态数组
标签:
原文地址:http://www.cnblogs.com/dylqt/p/4869777.html