智能指针shared_ptr实现
时间: 2023-11-04 08:52:31 浏览: 115
shared_ptr是一种智能指针,它是C++11引入的一种新特性。shared_ptr的设计思路是利用三个主要组件来实现智能指针的功能:一块空间、计数器和锁。
首先,shared_ptr通过一块堆空间来存储所指向的对象。这个堆空间是由shared_ptr自动管理的,当最后一个指向对象的shared_ptr被销毁时,这块空间会被释放。
其次,shared_ptr使用一个计数器来记录当前有多少个shared_ptr共享同一个对象。每当有一个新的shared_ptr指向对象时,计数器就会加1;当有一个shared_ptr被销毁时,计数器就会减1。当计数器为0时,表示没有任何shared_ptr指向对象,此时对象会被释放。
最后,shared_ptr还使用锁来确保多线程环境下的安全访问。由于shared_ptr是可以被多个指针共享的,因此在多线程环境中,可能存在多个线程同时操作同一个shared_ptr。为了避免竞争条件,shared_ptr内部使用了锁来保证多线程操作的原子性和线程安全性。
总结起来,shared_ptr实现了智能指针的功能,通过一块空间、计数器和锁来管理所指向对象的生命周期。它可以跟踪对象的引用计数,并在最后一个shared_ptr被销毁时自动释放对象。同时,shared_ptr还具备多线程安全的特性,可以在多线程环境下使用。
参考文献:
前面介绍的auto_ptr和unique_ptr都存在着些许的缺陷,显得不是那么的“智能”,下面我们来看一下较为智能的shared_ptr的设计思路(一块空间、计数器、锁)
主要介绍了C++11新特性之智能指针,包括shared_ptr, unique_ptr和weak_ptr的基本使用,感兴趣的小伙伴们可以参考一下
这是因为weak_ptr是一种不控制所指向对象生存期的智能指针,它指向由一个shared_ptr管理的对象。将一个weak_ptr绑定到shared_ptr不会改变shared_ptr的引用计数。一旦最后一个指向对象的shared_ptr被销毁,对象就会被释放。即使weak_ptr指向对象,对象也会被释放。
阅读全文