weak_ptr 实现 1. weak_ptr的基本概念 weak_ptr 是C++11 引入的一种智能指针,用于解决 shared_ptr 可能导致的循环引用问题。weak_ptr 不拥有其所指向的对象,也就是说,它不会影响对象的引用计数。它更像是一个对 shared_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 拥有对动态分配对象的唯一所有权。unique_ptr 通过移动语义来实现独占所有权,因此不能被复制,只能被移动。当 unique_ptr 被销毁时,它所指向的对象也会被销毁。 下面是 unique_ptr 的简单示例: 编译错误,unique_ptr 不能被复制 的实现原理 是为了配合 ...
首发于FREE SOLO-自己动手实现Raft 切换模式写文章 登录/注册FREE SOLO - 自己动手实现Raft - 8 - weak_ptr源码分析与调试 castermode vectordb.io2 人赞同了该文章 目录 收起 1 - weak引用计数增加 2 - weak引用计数减少 3 - lock 4 - operator= 5 - shared_from_this 6 - 代码与脚本 7 - ...
实现简单的weak_ptr weak_ptr概念 My_weak_ptr是一个模板派生类,My_Ptr_base是它的基类 My_weak_ptr模板类没有自己的数据成员,而是只提供了一些供调用的接口; 只能使用 My_shared_ptr 和 My_weak_ptr 对象来构造 My_weak_ptr对象。 My_weak_ptr对象的构造完成只能使_weaks的值加1 ;...
在理解weak_ptr的实现原理之前,我们首先来回顾一下shared_ptr的工作原理。 shared_ptr是一种引用计数智能指针,它通过记录有多少个shared_ptr指向同一个对象来判断该对象是否可以被释放。每当一个shared_ptr被创建时,引用计数加1;当一个shared_ptr被销毁时,引用计数减1。当引用计数为0时,表示没有任何shared_ptr...
例如std::mutex和std::lock_guard等。下面是一个可能的线程安全的观察者模式实现:
和shared_ptr、unique_ptr 类型指针一样,weak_ptr 智能指针也是以模板类的方式实现的。weak_ptr<T>( T 为指针所指数据的类型)定义在<memory>头文件,并位于 std 命名空间中。因此,要想使用 weak_ptr 类型指针,程序中应首先包含<memory>头文件。 需要注意的是,C++11标准虽然将 weak_ptr 定位为智能指针的一种...
在boost中有一种 scope_ptr 指针,可以说这是boost库中最为简单的一种智能指针了。相对于前两种智能指针而言, scope_ptr 规定,一个智能指针只能引用一块堆内存,当这个指针的作用域消失之后自动释放。 scope_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...