码迷,mamicode.com
首页 > 编程语言 > 详细

学习C++ Primer 的个人理解(十二)

时间:2016-07-09 01:53:02      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

动态内存与智能指针

  在C++中, 动态内存用 new来分配空间并返回一个指向该对象的指针

        用delete来销毁。

 

  由于手动的对动态内存进行操作容易出现问题。所以新的标准库提供了两种智能指针

  

  智能指针的行为类似于常规指针。区别在于他负责自动释放所指对象。

 

  shared_ptr : 允许多个指针指向同一个对象。

  unique_ptr :独占所指向的对象

  weak_ptr   :是一种弱引用,指向shared_ptr 所管理的对象  

 

shared_ptr 类

  类似vector ,shared_ptr 也是模板,也需要提供额外的信息。

  shared_ptr<string> p1;  可以指向string

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

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

 

  使用方法与普通指针类似。

 

make_shared 函数

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

  此函数在动态内存中分配一个对象并初始化他,然后返回指向此对象的shared_ptr。如:

 

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

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

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

  类似顺序容器的 emplace 成员,make_shared用其参数来狗仔给定类型的对象。

  

   也可以直接用auto:

      auto p6 = make_shared<vector<string>>();

 

shared_ptr 的拷贝和赋值

  拷贝或赋值操作时,每个shared_ptr都会记录有多少其他的shared_ptr指向相同的对象。

    auto p =make_shared<int>(42) // p指向的对象只有p一个引用者

    auto q(p) // q和p指向相同的对象,此对象有两个引用者。

 

    一旦一个shared_ptr的计数器变为0,他就会自动释放自己所管理的对象。

    auto r =make_shared<int>(42);  // r指向的int只有一个引用者。

    r = q  给r赋值,让他指向另一个地址

        r原来指向的对象没有引用这,自动释放。

 

  

学习C++ Primer 的个人理解(十二)

标签:

原文地址:http://www.cnblogs.com/qita/p/5655002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!