weak_ptr 的实现主要依赖于对 shared_ptr 引用计数的弱引用支持。在 shared_ptr 的内部实现中,通常会有一个强引用计数(用于跟踪 shared_ptr 的数量)和一个弱引用计数(用于跟踪 weak_ptr 的数量)。 当一个 weak_ptr 被创建时,它只会增加弱引用计数,而不会增加强引用计数。 当weak_ptr 被销毁时,它会减少弱...
1. shared_ptr的实现 2. weak_ptr的实现 3. enable_shared_from_this的实现 这个版本的智能指针是我去看了本机上GNU C++标准库中shared_ptr源码后写的,在我的ubuntu22.04上,源码位置在/usr/include/c++/12/bits/shared_ptr_base.h和/usr/include/c++/12/bits/shared_ptr.h下。GNU源码的可读性并不那么好...
编译错误,unique_ptr 不能被复制 的实现原理 是为了配合 shared_ptr 而引入的一种智能指针,它指向由 shared_ptr 管理的对象,但不影响对象的生命周期。通过 weak_ptr,我们可以解决 shared_ptr 的循环引用问题,避免内存泄漏。 通过shared_ptr 来创建,但不增加引用计数。当需要访问 weak_ptr 指向的对象时,可以通过 ...
实现了一个简易的智能指针,并使用简单例子测试后,也没发现内存泄漏。 #include<iostream>#include<atomic>#define _CRTDBG_MAP_ALLOC#include<stdlib.h>#include<crtdbg.h>template<typenameT>classWeakPtr;template<typenameT>classSharedPtr;template<typenameT>classSharedPtr{public:friendclassWeakPtr<T>;friendvoid...
其实,weak_ptr的实现原理非常简单。当我们创建一个weak_ptr时,其内部会保存一个指向对象的裸指针,并且还会保存一个指向该对象的引用计数的指针。而这个引用计数指针则是由shared_ptr来维护的。 当我们通过weak_ptr的lock()方法将其转换为shared_ptr时,它会检查引用计数指针是否为空。如果为空,表示原来的shared_ptr...
只能使用 My_shared_ptr 和 My_weak_ptr 对象来构造 My_weak_ptr对象。 My_weak_ptr对象的构造完成只能使_weaks的值加1 ; My_weak_ptr的生命期结束时,自动调用析构函数,析构函数中会调用计数器的My_Ref_count_base::_Decwref ()函数,weaks的引用计数减1,若_weaks计数为0,就会调用My_Ref_count_base:...
std::vector<std::weak_ptr<Observer>> observers_;};```3. 定义观察者类 定义一个观察者类,实...
和shared_ptr、unique_ptr 类型指针一样,weak_ptr 智能指针也是以模板类的方式实现的。weak_ptr<T>( T 为指针所指数据的类型)定义在<memory>头文件,并位于 std 命名空间中。因此,要想使用 weak_ptr 类型指针,程序中应首先包含<memory>头文件。 需要注意的是,C++11标准虽然将 weak_ptr 定位为智能指针的一种...
参考STL源码做一个简单的实现 1#include <atomic>2#include <functional>34template<typename Ptr>5classSp_counted_base6{7public:8Sp_counted_base(Ptr p)9: m_ptr(p), m_use_count(1), m_weak_count(1){}10Sp_counted_base(Ptr p, std::function<void(Ptr)>func)11: m_ptr(p), m_use_count...