zoukankan      html  css  js  c++  java
  • share_ptr

    1、为了保证不会重复释放内存,auto_ptr的copy构造和copy赋值都是破坏性操作,执行后,导致右操作数的指针为0。这就出现了,copy构造或者copy赋值后,两个对象不相等了。

    2、auto_ptr的问题就是,一块内存只能有一个指针指向它,为了解决这个问题,使用share_ptr。

    3、share_ptr是如何实现的?

      a、内部有一个指向原始资源的指针。

      b、内部维护一个share_count,记录有多少个指针指向该内存。

      c、析构的时候,share_count>1,将计数减1;share_count==1释放内存。

      d、考虑到每个share_ptr中都有一个自己的share_count,而且还要保证这个数一致,应该这样做:先对原始资源封装,加入share_count,成为带有count的资源,share_count在对它封装,这样就可以只有一个share_count了。

      e、copy构造的时候,lhs的指针指向rhs的资源,share_count加1。

      f、copy赋值的时候,先检查左操作数原来的资源是否可以释放,lhs的指针指向rhs的资源,share_count加1。

  • 相关阅读:
    C++类继承内存布局(二)
    C++类继承内存布局(一)
    排序算法
    python 文件路径问题
    python map对象
    python reduce() 函数
    python eval 用法
    PyCharm引入自定义类报错
    Python中的lambda的简单介绍
    python time模块和datetime模块
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3381071.html
Copyright © 2011-2022 走看看