020 引用计数

作者: 赵者也 | 来源:发表于2020-04-02 15:52 被阅读0次

引用计数的工作方式:

  1. 除了初始化对象外,每个构造函数(除拷贝构造函数外)还要创建一个引用计数,用来记录有多少对象与正在创建的对象共享状态。当我们创建一个对象时,只有一个对象共享状态,因此将计数器初始化为1。

  2. 拷贝构造函数不分配新的计数器,而是拷贝给定对象的数据成员,包括计数器。拷贝构造函数递增共享的计数器,指出给定对象的状态又被一个新用户共享。

  3. 析构函数递减计数器,指出共享状态的用户少了一个。如果计数器变为0,则析构函数释放状态。

  4. 拷贝赋值运算符递增右侧运算对象的计数器,递减左侧运算对象的计数器。如果左侧运算对象的计数器变为0,意味着它的共享状态没有用户了,拷贝赋值运算符就必须销毁状态。

我们可以通过在动态内存中保存计数器的方法来解决在哪里存放引用计数的问题。这里注意 大多数赋值运算符组合了析构函数和拷贝构造函数的工作 这一特点。

class HasPtr
{
public:
    HasPtr(const std::string &s = std::string()) : ps(new std::string(s)), i(0),
        use_count(new std::size_t(1))
    {}
    HasPtr(const HasPtr &p) : ps(p.ps), i(p.i), use_count(p.use_count)
    {
        ++*use_count;
    }
    ~HasPtr();

    HasPtr& operator=(const HasPtr&p);

private:
    std::string *ps;
    int i;
    std::size_t *use_count;
};

其实现部分:

HasPtr::~HasPtr()
{
    if (--*use_count == 0) {
        delete ps;
        delete use_count;
    }
}

HasPtr &HasPtr::operator=(const HasPtr &p)
{

    ++*p.use_count;

    // like析构函数
    if (--*use_count == 0) {
        delete ps;
        delete use_count;
    }

    // like拷贝构造函数
    ps = p.ps;
    i = p.i;
    use_count = p.use_count;

    return *this;
}

相关文章

  • 020 引用计数

    引用计数的工作方式: 除了初始化对象外,每个构造函数(除拷贝构造函数外)还要创建一个引用计数,用来记录有多少对象与...

  • iOS内存管理初探 – 引用计数、AutoRelease与ARC

    引用计数式内存管理 引用计数 iOS通过引用计数管理对象的生命周期,每个对象有其引用计数。 对象被强引用时引用计数...

  • Obj-C高级编程--内存管理

    自动引用计数 自动引用计数:指内存管理中对引用采取自动计数的技术。 内存管理/引用计数 持有对象引起引用计数加...

  • GC算法

    引用计数 每个对象有一个引用计数,当对象被多引用一次,引用计数加一,当引用被释放,引用计数减一,当引用计数为零,则...

  • 内存管理与自动引用计数—第一日

    自动引用计数 1.1 什么是自动引用计数 内存管理中对引用采用自动计数的计数 1.2 内存管理/引用计数 这一张举...

  • GC算法 垃圾收集器

    一、对象存活判断 引用计数:每个对象都有引用计数属性,新增一个引用时计数+1,引用释放时计数-1,当计数为0时可以...

  • iOS内存管理

    1. 引用计数 1.1 引用计数原理 Objective-C 使用引用计数管理内存。新创建的对象引用计数至少为1,...

  • iOS内存管理1:引用计数

    iOS内存管理1:引用计数 引用计数: Objecttive-C使用引用计数来进行内存管理。然后,引用计数其实是不...

  • 读书笔记-《Objective-C高级编程》之自动引用计数

    自动引用计数 1.1什么是自动引用计数 自动引用计数(ARC, Automatic Reference Count...

  • OC高级编程iOS内存管理-第1章-自动引用计数

    自动引用计数 什么是自动引用计数内存管理/引用计数ARC规则ARC的实现 1.1 什么是自动引用计数 ARC和MR...

网友评论

    本文标题:020 引用计数

    本文链接:https://www.haomeiwen.com/subject/jfzdactx.html