C++_手写share_ptr
以下是一个简化版的 shared_ptr 的实现:
#include <iostream>
template <typename T>
class SimpleSharedPtr {
public:// 构造函数explicit SimpleSharedPtr(T* ptr = nullptr) : ptr_(ptr), count_(ptr ? new size_t(1) : nullptr) {}// 拷贝构造函数SimpleSharedPtr(const SimpleSharedPtr& other) : ptr_(other.ptr_), count_(other.count_) {if (count_) {++(*count_);}}// 赋值操作符SimpleSharedPtr& operator=(const SimpleSharedPtr& other) {if (this != &other) {release();ptr_ = other.ptr_;count_ = other.count_;if (count_) {++(*count_);}}return *this;}// 析构函数~SimpleSharedPtr() {release();}T& operator*() const { return *ptr_; }T* operator->() const { return ptr_; }T* get() const { return ptr_; }size_t use_count() const { return count_ ? *count_ : 0; }private:void release() {if (count_ && --(*count_) == 0) {delete ptr_;delete count_;}}T* ptr_;size_t* count_;
};class MyClass {
public:MyClass() { std::cout << "MyClass 构造函数\n"; }~MyClass() { std::cout << "MyClass 析构函数\n"; }void do_something() { std::cout << "MyClass::do_something() 被调用\n"; }
};int main() {{SimpleSharedPtr<MyClass> ptr1(new MyClass());{SimpleSharedPtr<MyClass> ptr2 = ptr1;ptr1->do_something();ptr2->do_something();std::cout << "引用计数: " << ptr1.use_count() << std::endl;}std::cout << "引用计数: " << ptr1.use_count() << std::endl;}return 0;
}
这个简化版的 shared_ptr 实现了基本的共享所有权和引用计数功能,方便我们学习了解原理。
但是这个实现并不完整,它缺少了很多 std::shared_ptr 的高级功能,例如自定义删除器、std::make_shared() 和 std::allocate_shared() 函数以及线程安全性等。
在实际项目中,还是使用 C++ 标准库提供的 std::shared_ptr。
相关文章:
C++_手写share_ptr
以下是一个简化版的 shared_ptr 的实现: #include <iostream> template <typename T> class SimpleSharedPtr { public:// 构造函数explicit SimpleSharedPtr(T* ptr nullptr) : ptr_(ptr), count_(ptr ? new size_t(1) : nullptr) {}// 拷贝构造函数…...
【启明智显方案分享】6.86寸高清显示屏音频效果器解决方案
一、项目概述 本方案旨在设计一款集成6.86寸高清触摸显示屏的音频效果器,通过HMI(Human-Machine Interface)芯片Model 4驱动,实现高清晰度的视觉交互。该设备不仅支持音乐、麦克风及温响音量的精细控制,还内置丰富的预…...
vue设置每次加载页面时展示一个双开门效果
一、首先创建一个双开门的蒙层组件 <!-- DoorOverlay.vue --> <template><div v-if"isVisible" class"door-overlay"><div class"door left-door"></div><div class"door right-door"></div&…...
简单的docker学习 第8章 docker常用服务安装
第8章 常用服务安装 本章主要学习最常用的,也是安装起来稍有些麻烦的 MySQL 与 Redis 两种服务器的Docker 安装。至于其它服务器的 Docker 安装,大家可自行查找资料。只要 MySQL 与 Redis这两类服务器学会了安装,其它服务器的安装基本也不会…...
01、MySQL-DDL(数据定义语言)
目录 1、查询 2、创建 3、修改 4、删除 1、查询 1、查询所有数据库 show databases; 2、查询当前数据库 select database(); 3、查询当前数据库中所有的表(需要先进入这个数据库) use d1; show tables; 4、查询表结构 desc users; 5、查询指定表的建…...
RT-Thread 操作系统 之 线程间同步 IO设备模型
RT-Thread 操作系统 之 线程间同步 IO设备模型 一、线程间同步1.1、信号量1.1.1、信号量结构体1.1.2、信号量的使用和管理1.1.3、信号量同步例程 1.2、互斥量1.2.1、互斥量的使用和管理 1.3、事件集1.3.1、事件集使用和管理方法1.3.2、事件集三个线程同步实例 二、IO设备模型2.…...
力扣leetcode移动0(C++)
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: […...
阿里云部署open-webui实现openai代理服务
一、 环境准备 1. 阿里云服务器,ubuntu22系统 2. 外网服务器,linux系统 3. openai API Key 二、实际操作记录(阿里云服务器端) 1. 根据官方文档安装open-webui服务端: 🚀 Getting Started | Open WebUI 1. 如果服务器配置比较低,…...
你的工作环境,选对劳保鞋了吗?守护安全,从脚下开始!
在众多的工作场所中,我们穿梭于不同的工作环境,从繁忙的工厂车间到复杂的建筑工地,再到需要精细操作的实验室……每一步都承载着对安全的期许和对效率的追求。但你是否意识到,脚下那双不起眼的劳保鞋,其实是守护你安全…...
【Linux】编译器gcc/g++ 、程序翻译过程、动静态库
目录 1.gcc/g Linux编译器1.1. gcc与g的安装1.2. gcc与g用法1.2.1.gcc用法1.2.2. g用法 1.3. 程序翻译的过程1.3.1. 前提知识:1.3.2. 预处理(语言种类不变)条件编译用途: 1.3.3. 编译(生成汇编语言)1.3.4. …...
通义灵码-阿里云推出的AI智能编码助手
通义灵码体验地址 标题通义灵码是什么? 通义灵码是由阿里巴巴推出的基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力,并针对阿里云…...
构建智能生态,视频监控/安防监控EasyCVR视频汇聚流媒体技术在智能分析领域的应用
随着5G、AI、物联网(IoT)、云计算等技术的快速发展,万物互联的时代已经到来,全新的行业生态AIoT正在引领一场深刻的变革。在这场变革中,EasyCVR视频流媒体技术以其强大的视频处理、汇聚与融合能力,在智能分…...
LeetCode Hard|【460. LFU 缓存】
力扣题目链接 LFU全称是最不经常使用算法(Least Frequently Used),LFU算法的基本思想和所有的缓存算法一样,一定时期内被访问次数最少的页,在将来被访问到的几率也是最小的。 相较于 LRU 算法,LFU 更加注重…...
积极参与全球能源科技前沿对话,海博思创推动绿色低碳发展
在能源转型与绿色低碳发展的全球浪潮中,国内领先的储能解决方案供应商海博思创以卓越的技术实力和前瞻性的战略眼光,站在了行业变革的前沿。公司不仅在国内外多个重要展会上大放异彩,更通过一系列技术创新与深度合作,为全球能源行…...
[工具]-ffmpeg-笔记
朋友有一个需求,将视频文件转化为音频文件、音频文件获取音频转化为文本文件。 思路:通过ffmpeg转化视频为音频,通过百度ai提供的voice_t_text接口提取语音文本,但是需要将音频分割成1分钟内的pcm编码 ,采样率16000的…...
Android Fragment:详解,结合真实开发场景Navigation
目录 1)Fragment是什么 2)Fragment的应用场景 3)为什么使用Fragment? 4)Fragment如何使用 5)Fragment的生命周期 6)Android开发,建议是多个activity,还是activity结合fragment&…...
JavaWeb中的Servlet
本笔记基于【尚硅谷全新JavaWeb教程,企业主流javaweb技术栈】https://www.bilibili.com/video/BV1UN411x7xe?vd_sourcea91dafe0f846ad7bd19625e392cf76d8总结 Servlet Servlet简介 动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运…...
SpringBoot AOP 简单的权限校验
本篇文章的主要内容是通过AOP切面编程实现简单的权限校验。 书接上回登录与注册功能 我们的用户表里面不是有role(权限)这个字段吗 在JWT令牌的生成中,我们加入了role字段。 那么接下来,我们就可以通过这个字段来实现权限校验。 我这里就很简单&#x…...
Java生成Word->PDF->图片:基于poi-tl 进行word模板渲染
文章目录 引言I Java生成Word、PDF、图片文档获取标签渲染数据生成文档案例II 工具类封装2.1 word 渲染和word 转 pfd2.2 pdf转成一张图片III poi-tl(word模板渲染) 标签简介文本标签{{var}}图片标签表格标签引用标签IV poi-tl提供了类 Configure 来配置常用的设置标签类型前后…...
JVM内存模型笔记
1. 运行时数据区概述 JVM内存布局规定了Java运行过程中的内存申请、分配和管理策略。运行时数据区分为线程私有和线程共享两种。 2. 线程私有内存 程序计数器:存储当前线程执行的字节码指令地址。虚拟机栈:保存方法调用的局部变量和部分结果。本地方法…...
Qwen3.5-4B模型网络协议分析与故障模拟实践
Qwen3.5-4B模型网络协议分析与故障模拟实践 1. 网络工程师的新助手 最近遇到一个典型的运维场景:某电商平台大促期间,支付接口频繁出现连接超时。运维团队抓包分析后发现TCP重传率异常,但传统方法定位具体原因耗时长达3小时。这正是Qwen3.5…...
Qwen3.5-4B模型在VS Code中的集成:打造个人AI编程工作站
Qwen3.5-4B模型在VS Code中的集成:打造个人AI编程工作站 1. 前言:为什么要在VS Code中集成Qwen3.5-4B 作为一名开发者,你可能已经习惯了在各种在线平台上使用AI辅助编程。但有没有想过,把这些能力直接搬到你的本地开发环境中&am…...
未来之窗昭和仙君(八十八)东方仙盟神识FACLAW说明书—东方仙盟
东方仙盟类md5算法功能说明书未来之窗昭和仙君 - cyberwin_fairyalliance_webquery一、功能概述东方仙盟类md5算法主要用于对输入的文本进行压缩处理,生成一个32位的十六进制字符串。该算法通过加权计算、哈希强化、位置扰动等步骤,确保即使对于超长文本…...
TBPubSubClient:嵌入式MQTT轻量客户端深度解析
1. TBPubSubClient 项目概述TBPubSubClient 是一个面向嵌入式物联网终端的轻量级 MQTT 客户端库,专为资源受限的微控制器平台设计。该项目源自 Nick OLeary 维护的经典 PubSubClient 库(2020 年主仓库停止更新),由 ThingsBoard 团…...
OpenClaw日志分析技巧:千问3.5-9B辅助故障定位
OpenClaw日志分析技巧:千问3.5-9B辅助故障定位 1. 为什么需要AI辅助日志分析? 上周排查一个OpenClaw任务失败的问题时,我盯着3MB的日志文件看了整整两小时。那些重复的报错堆栈和模糊的警告信息像迷宫一样——直到我意识到:与其…...
K3s证书过期急救指南:5分钟搞定证书轮换(附一键脚本)
K3s证书过期急救指南:5分钟搞定证书轮换(附一键脚本) 凌晨三点,报警短信突然炸响——K3s集群所有服务不可用。登录控制台看到满屏的x509: certificate has expired or is not yet valid报错时,我才意识到证书过期这个&…...
Mac电脑免费小龙虾OpenClaw+Ollama使用心得
一、前言 很多人以为本地部署OpenClaw小龙虾(原始版)不管是调用国外大模型还是国内大模型,都要付费才能使用,并且如果是需要大耗量的token调用操作费用还不便宜。加上最近新闻发布的“龙虾”安全问题,因此很多人是望而…...
某音抓包翻车实录:从Hook失败到稳定替换so的踩坑与修复指南
移动端安全测试进阶:Hook失效后的SO文件修改实战解析 当我们在移动端安全测试或逆向分析过程中遇到常规Hook方法失效时,往往需要深入底层寻找解决方案。本文将分享一个典型的案例:当Frida动态注入无法达到预期效果时,如何通过静态…...
【深度解析】Hermes Agent:具备学习循环的开源 AI 代理如何落地到你的开发工作流?
摘要 Hermes Agent 是 News Research 推出的开源 AI Agent 系统,不只是“聊天包装器”,而是带有持久化记忆、自我技能学习与多通道接入的完整代理运行环境。本文从架构原理到落地实践,系统解析 Hermes 的学习循环、模型接入方式(云…...
MATLAB六自由度齿轮弯扭耦合动力学代码(含时变啮合刚度、齿侧间隙及集中质量法建模的数值计算分析)
MATLAB六自由度齿轮弯扭耦合动力学代码(考虑时变啮合刚度、齿侧间隙),根据集中质量法建模(含数学方程建立和公式推导)并在MATLAB中采用ODE45进行数值计算。 输出齿轮水平和竖直方向的振动位移、振动速度、振动加速度、…...
