您的位置:首页 > 编程语言 > C语言/C++

C++primer学习笔记----智能指针

2017-06-12 16:01 302 查看
动态内存分配时书中极力建议使用的东西,和new/delete组合相比各种好。

C++程序用堆(heap)来存储动态分配的对象,即在程序运行时分配的对象。动态对象的生存期由程序来控制。当动态对象不再使用时,代码必须显示地销毁它们。

new:在动态内存中为对象分配空间并返回一个指向该对象的指针。

delete:接受一个动态对象的指针,销毁该对象,并释放内存。

C++11中两种智能指针:1.shared_ptr----允许多个指针指向同一个对象。2.unique_ptr----指针独占所指向的对象。(二者定义在memory头文件中)。

类似于容器,智能指针也是模板:

     shared_ptr<string> p1;//p1可指向string

     shared_ptr<list<int> >  p2;//p2可指向int的list

默认初始化的智能指针中保存着一个空指针。

make_shared<T> (args) 返回一个shared_ptr,指向一个动态分配的类型为T的对象,使用args初始化此对象。

最安全的分配和使用动态内存的方法是调用一个名为make_shared的标准库函数

它在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。

shared_ptr<int> p3=make_shared<int> (42);//p3是指向一个值为42的int类型的shared_ptr

shared_ptr<string> p4=make_shared<string> (10,'9');//p4指向一个值为9999999999的string

shared_ptr<int> p5=make_shared<int> ();//p5指向一个值初始化的int,即值为0

make_shared用其参数来构造给定类型的成员,若没有参数,对象会进行值初始化。

auto p6=make_shared<vector<string> > ();//p6指向一个动态分配的空vector<string>。

每个shared_ptr都有一个关联的计数器,成为引用计数,无论何时拷贝一个shared_ptr,计数器都会递增。当给shared_ptr赋予一个新值或是shared_ptr被销毁,计数器就会递减,当指向一个对象的最后一个shared_ptr被销毁时,shared_ptr类会自动销毁此对象(通过析构函数)。对于一块内存,shared_ptr类保证只要有任何shared_ptr对象引用它,它就不会被释放掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++primer C++ 智能指针