当前位置: 首页 > news >正文

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 的实现&#xff1a; #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寸高清触摸显示屏的音频效果器&#xff0c;通过HMI&#xff08;Human-Machine Interface&#xff09;芯片Model 4驱动&#xff0c;实现高清晰度的视觉交互。该设备不仅支持音乐、麦克风及温响音量的精细控制&#xff0c;还内置丰富的预…...

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章 常用服务安装 本章主要学习最常用的&#xff0c;也是安装起来稍有些麻烦的 MySQL 与 Redis 两种服务器的Docker 安装。至于其它服务器的 Docker 安装&#xff0c;大家可自行查找资料。只要 MySQL 与 Redis这两类服务器学会了安装&#xff0c;其它服务器的安装基本也不会…...

01、MySQL-DDL(数据定义语言)

目录 1、查询 2、创建 3、修改 4、删除 1、查询 1、查询所有数据库 show databases; 2、查询当前数据库 select database(); 3、查询当前数据库中所有的表&#xff08;需要先进入这个数据库&#xff09; 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&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: […...

阿里云部署open-webui实现openai代理服务

一、 环境准备 1. 阿里云服务器&#xff0c;ubuntu22系统 2. 外网服务器&#xff0c;linux系统 3. openai API Key 二、实际操作记录(阿里云服务器端) 1. 根据官方文档安装open-webui服务端: &#x1f680; Getting Started | Open WebUI 1. 如果服务器配置比较低&#xff0c;…...

你的工作环境,选对劳保鞋了吗?守护安全,从脚下开始!

在众多的工作场所中&#xff0c;我们穿梭于不同的工作环境&#xff0c;从繁忙的工厂车间到复杂的建筑工地&#xff0c;再到需要精细操作的实验室……每一步都承载着对安全的期许和对效率的追求。但你是否意识到&#xff0c;脚下那双不起眼的劳保鞋&#xff0c;其实是守护你安全…...

【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. 前提知识&#xff1a;1.3.2. 预处理&#xff08;语言种类不变&#xff09;条件编译用途&#xff1a; 1.3.3. 编译&#xff08;生成汇编语言&#xff09;1.3.4. …...

通义灵码-阿里云推出的AI智能编码助手

通义灵码体验地址 标题通义灵码是什么&#xff1f; 通义灵码是由阿里巴巴推出的基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云…...

构建智能生态,视频监控/安防监控EasyCVR视频汇聚流媒体技术在智能分析领域的应用

随着5G、AI、物联网&#xff08;IoT&#xff09;、云计算等技术的快速发展&#xff0c;万物互联的时代已经到来&#xff0c;全新的行业生态AIoT正在引领一场深刻的变革。在这场变革中&#xff0c;EasyCVR视频流媒体技术以其强大的视频处理、汇聚与融合能力&#xff0c;在智能分…...

LeetCode Hard|【460. LFU 缓存】

力扣题目链接 LFU全称是最不经常使用算法&#xff08;Least Frequently Used&#xff09;&#xff0c;LFU算法的基本思想和所有的缓存算法一样&#xff0c;一定时期内被访问次数最少的页&#xff0c;在将来被访问到的几率也是最小的。 相较于 LRU 算法&#xff0c;LFU 更加注重…...

积极参与全球能源科技前沿对话,海博思创推动绿色低碳发展

在能源转型与绿色低碳发展的全球浪潮中&#xff0c;国内领先的储能解决方案供应商海博思创以卓越的技术实力和前瞻性的战略眼光&#xff0c;站在了行业变革的前沿。公司不仅在国内外多个重要展会上大放异彩&#xff0c;更通过一系列技术创新与深度合作&#xff0c;为全球能源行…...

[工具]-ffmpeg-笔记

朋友有一个需求&#xff0c;将视频文件转化为音频文件、音频文件获取音频转化为文本文件。 思路&#xff1a;通过ffmpeg转化视频为音频&#xff0c;通过百度ai提供的voice_t_text接口提取语音文本&#xff0c;但是需要将音频分割成1分钟内的pcm编码 &#xff0c;采样率16000的…...

Android Fragment:详解,结合真实开发场景Navigation

目录 1&#xff09;Fragment是什么 2&#xff09;Fragment的应用场景 3&#xff09;为什么使用Fragment? 4&#xff09;Fragment如何使用 5&#xff09;Fragment的生命周期 6&#xff09;Android开发&#xff0c;建议是多个activity&#xff0c;还是activity结合fragment&…...

JavaWeb中的Servlet

本笔记基于【尚硅谷全新JavaWeb教程&#xff0c;企业主流javaweb技术栈】https://www.bilibili.com/video/BV1UN411x7xe?vd_sourcea91dafe0f846ad7bd19625e392cf76d8总结 Servlet Servlet简介 动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运…...

SpringBoot AOP 简单的权限校验

本篇文章的主要内容是通过AOP切面编程实现简单的权限校验。 书接上回登录与注册功能 我们的用户表里面不是有role(权限)这个字段吗 在JWT令牌的生成中&#xff0c;我们加入了role字段。 那么接下来&#xff0c;我们就可以通过这个字段来实现权限校验。 我这里就很简单&#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. 线程私有内存 程序计数器&#xff1a;存储当前线程执行的字节码指令地址。虚拟机栈&#xff1a;保存方法调用的局部变量和部分结果。本地方法…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...