C++中指针使用详解(4)指针的高级应用汇总
C++ 中指针的高级应用非常丰富,掌握这些内容能让你写出更高性能、更底层控制力强的代码。下面是应用模块梳理和例子讲解。
目录预览
- 函数指针与回调机制
- 指针数组 vs 数组指针
- 指针与类成员函数(成员函数指针)
- 智能指针(
unique_ptr
,shared_ptr
,weak_ptr
) - 指针与继承、虚函数表(vtable)
- 指针与内存对齐、指针算术
- 指针类型转换(
reinterpret_cast
,static_cast
) - 指针模拟多态和接口
- 自定义 allocator / 内存池(高级性能优化)
- 指针与并发(原子指针、锁自由结构)
1. 函数指针与回调机制
声明与使用
void hello() {std::cout << "Hello\n";
}void call(void (*func)()) {func(); // 调用传入的函数指针
}
也可以传入带参数的函数:
void print(int x) {std::cout << x << "\n";
}void call(void (*func)(int), int val) {func(val);
}
2. 指针数组 vs 数组指针
表达式 | 含义 |
---|---|
int* arr[10] | 数组,每个元素是 int* |
int (*arr)[10] | 指向数组 的指针 |
示例
int* pArr[10]; // 10 个 int 指针
int arr[10];
int (*p)[10] = &arr; // 一个指针,指向包含 10 个 int 的数组
3. 成员函数指针
声明和调用成员函数指针:
class A {
public:void show() { std::cout << "A::show\n"; }
};void (A::*pFunc)() = &A::show;A a;
(a.*pFunc)(); // 使用成员函数指针调用
注意:成员函数指针与普通函数指针不同,它需要对象实例才能调用。
4. 智能指针(现代 C++ 的推荐方式)
std::unique_ptr
std::unique_ptr<int> p = std::make_unique<int>(10);
- 不能拷贝,只能转移
- 自动析构,无需手动 delete
std::shared_ptr
std::shared_ptr<int> p1 = std::make_shared<int>(20);
std::shared_ptr<int> p2 = p1; // 引用计数 +1
- 多个指针共享对象生命周期
std::weak_ptr
避免循环引用
std::weak_ptr<int> wp = p1;
5. 指针与虚函数表(vtable)
基类指针指向派生类(多态)
class Base {
public:virtual void foo() { std::cout << "Base\n"; }
};class Derived : public Base {
public:void foo() override { std::cout << "Derived\n"; }
};Base* b = new Derived();
b->foo(); // 输出 "Derived"
底层通过虚函数表(vtable)实现,vptr 指针指向类的虚函数表。
6. 内存对齐与指针算术
struct alignas(16) Vec4 {float x, y, z, w;
};
指针算术是按类型大小偏移的:
int* p = arr;
p += 2; // 实际偏移 sizeof(int) * 2 字节
7. 指针类型转换
int a = 10;
void* vp = &a;int* ip = static_cast<int*>(vp); // OK
float* fp = reinterpret_cast<float*>(ip); // 危险,类型错配
类型转换建议顺序:
static_cast
:安全的编译期转换reinterpret_cast
:位级别转换,需小心const_cast
:去掉const
限定dynamic_cast
:用于 RTTI 下的多态类型转换(带virtual
)
8. 指针模拟多态与接口
struct Interface {void (*run)(void*);void* self;
};void do_something(void* p) {std::cout << "Run on raw object\n";
}Interface iface = { do_something, nullptr };
iface.run(iface.self);
- 类似于 C 风格接口表
- 可用于插件系统、自定义脚本语言嵌入等
9. 自定义内存分配器(性能优化)
使用自定义 pointer allocator,跳过 malloc/new:
template <typename T>
class MyAllocator {...T* allocate(size_t n) { return static_cast<T*>(::operator new(n * sizeof(T))); }
};
结合 STL 使用:
std::vector<int, MyAllocator<int>> v;
也可做内存池管理(如用于点云、游戏对象池)
10. 指针与并发
std::atomic<T*>
保证多线程访问安全- 可用于 lock-free 数据结构
std::atomic<int*> ap;
int* p = new int(42);
ap.store(p);
高级:Hazard Pointer、ABA 问题、Compare-And-Swap(CAS)
总结脑图式表
┌────────────┐│ 高级指针用法│└────────────┘↓┌────────────┬────────────┬────────────┬────────────┐│ 函数指针 │ 成员指针 │ 智能指针 │ 指针算术 │├────────────┴────────────┴────────────┴────────────┤│ 内存池 │ 指针与类 │ vtable 多态│ 类型转换 │├────────────┬────────────┬────────────┬────────────┤│ ABI + 栈帧 │ 并发原子指针│ 插件接口 │ STL allocator │└────────────┴────────────┴────────────┴────────────┘
相关文章:
C++中指针使用详解(4)指针的高级应用汇总
C 中指针的高级应用非常丰富,掌握这些内容能让你写出更高性能、更底层控制力强的代码。下面是应用模块梳理和例子讲解。 目录预览 函数指针与回调机制指针数组 vs 数组指针指针与类成员函数(成员函数指针)智能指针(unique_ptr, s…...
Java 8 非对称加密代码示例
以下是使用Java 8实现RSA非对称加密的完整代码示例,包括密钥生成、加密和解密过程。 1. 生成RSA密钥对 import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; impor…...
Linux环境基础与开发工具使用
1. Linux编译器vim 1.1 vim的基本概念讲解 vim有很多种模式,我们初学者常用的就是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)。 命令/正常模式(Normal mode) …...
【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘
问题: 使用mmdetection框架使用COCO格式训练自定义数据集时,其中模型使用HTC模型时出现如下问题: AttributeError: ‘DetDataSample’ object has no attribute ‘_gt_sem_seg’. Did you mean: ‘gt_sem_seg’? results self(**data, mode…...
C# Winforms 本地化 多语言支持 字符串资源
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
ts bug 找不到模块或相应类型的声明,@符有红色波浪线
解决方法:在env.d.ts文件中添加以下代码,这段代码是一个 TypeScript 的声明文件,用于让 TypeScript 知道如何处理 Vue 单文件组件(.vue 文件)的导入。 /// <reference types"vite/client" /> // 声明…...
赛灵思 XCZU11EG-2FFVC1760I XilinxFPGAZynq UltraScale+ MPSoC EG
XCZU11EG-2FFVC1760I 是 Zynq UltraScale MPSoC EG 系列中性能最强的器件之一,集成了四核 ARM Cortex-A53 应用处理器、双核 Cortex-R5 实时处理器与 Mali-400 MP2 GPU,并结合了 653,100 个逻辑单元与丰富的片上存储资源,可满足高性能计算、A…...
VSCode|IDEA|PyCharm无缝接入DeepSeek R1实现AI编程
文章目录 前言一、流程简介1. 获取DeepSeek R1的API密钥2. 在编程软件中下载安装 Continue 插件**IDEA**PyCharm 3. 配置Continue文件 二、使用体验利用 DeepSeek R1进行 AI 编程 前言 本文将介绍如何在 VSCode|IDEA|PyCharm 软件中接入 DeepSeek R1 实现 AI 编程,…...
深入浅出 PostgreSQL:从历史演进到高阶优化技术
引言 PostgreSQL 是一个免费开源的对象关系型数据库,既支持传统的 SQL 查询,也支持 JSON 等非关系数据类型,因其高度可扩展性和社区活跃度,已成为众多互联网、金融和企业级应用的首选数据库 (Introduction to PostgreSQL - W3Sch…...
塔能水泵节能方案:精准驱动工厂能耗优化
在工厂的能源消耗体系中,水泵作为关键的动力设备,其运行效率直接关系到整体能耗水平。传统水泵在长期运行中,受设计局限、工艺成本约束等因素影响,普遍存在效率低下、能源浪费严重的问题。塔能科技针对这一痛点,推出了…...
SSCLMD模型代码实现详解
SSCLMD模型代码实现详解 1. 项目源码结构 SSCLMD项目的源码结构如下: SSCLMD-main/ ├── README.md ├── ST4.xlsx ├── Supplementary File.docx ├── code/ │ ├── calculating_similarity.py │ ├── data_preparation.py │ ├── data_…...
【coze】故事卡片(图片、音频、文字)
【coze】故事卡片(图片、音频、文字) 1、创建智能体2、添加人设与回复逻辑3、添加工作流(1)创建工作流(2)添加大模型节点(3)添加提示词优化节点(4)添加豆包图…...
限免开关实施版本保护措施,保证项目灰度发布安全
迭代用户限免权限校验业务 新增限免开关实现普通用户权益更新,实施版本保护措施,保证项目灰度发布安全; // 是否展示限免标识 func (t *BasePrivilegeService) IsPromotionFree(p consumParams) bool {// 限免开关isFreeUseOpen : p.cfg.Vip…...
C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化
多窗口源码 C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化资源-CSDN文库 读图结果展示 字符串结果展示 利用TCP调试工具创建两个tcp 再次启动程序 就链接…...
了解一下OceanBase中的表分区
OceanBase 是一个高性能的分布式关系型数据库,它支持 SQL 标准的大部分功能,包括分区表。分区表可以帮助管理大量数据,提高查询效率,通过将数据分散到不同的物理段中,可以减少查询时的数据扫描量。 在 OceanBase 中操…...
生成了一个AI算法
import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 1. 数据预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) # MNIST单通道归一化 ]) train_da…...
C# 使用SunnyUI控件 (VS 2019)
前言:建议下载源码,源码中包含了各种控件的用法案例。 下载 帮助文档: 文档预览 - Gitee.comGitee: SunnyUI: SunnyUI.NET 是基于.NET Framework 4.0、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。GitHub: h…...
在 Win11 下安装 Wireshark 的详细步骤
目录 一、了解 Wireshark1. 作用和功能2. 使用步骤 二、下载安装包三、运行安装包四、使用 Wireshark1. 抓包2. 窗口介绍3. 过滤器(显示 / 捕获过滤器)4. 保存过滤后的报文1)显示过滤器表达式2)过滤表达式的规则 5. 封包列表6. 封…...
【AI提示词】六顶思考帽工具专家
提示说明 提供专业的六顶思考帽工具应用服务,帮助用户从多角度进行创新性问题解决。 提示词 # Role: 六顶思考帽工具专家## Profile - language: 中文 - description: 提供专业的六顶思考帽工具应用服务,帮助用户从多角度进行创新性问题解决 - backgr…...
解锁RAG:AI 2.0时代的“知识外挂”是如何炼成的?
——从原理到实战,揭秘检索增强生成如何颠覆传统AI 引言:当AI学会“开卷考试” 如果传统大模型是“闭卷学霸”,那RAG(Retrieval-Augmented Generation,检索增强生成)就是那个考试时带着“百科全书”的超级…...
使用 ANSYS SIwave 求解器在 ANSYS AEDT 中预测串行通道性能并生成眼图
PCB 仿真 如今,无线射频设备日益复杂,对大型复杂 PCB 设计进行准确、高效仿真的需求也随之增加。在设计流程的早期识别和预测潜在问题可以节省资源、时间和金钱。SIwave 可帮助您对现代高性能电子产品中典型的高速通道和完整的输电系统进行建模、仿真和…...
启发式算法-模拟退火算法
模拟退火算法是一种基于概率的启发式优化算法,用于解决大规模组合优化问题,其灵感来源于金属退火过程中的物理现象。其基本原理是从一个初始解开始,然后在当前解的邻域内随机生成一个新解,如果新解的目标函数值优于当前解…...
机器视觉框架源码——解读3(常用的资源和样式)
这是关于框架解读的第三篇文章,将结合理论和框架代码进行讲解。 WPF中的各类工件元素,都可以设置其样式,如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Backgroud) 字体颜色(Foreground) 边距(Margin) 水平位置(HorizontalAlignment) 垂直位置(VerticalAlignment) 而样…...
勒索病毒肆虐时代:数据库加密存储的实践指南
在2025年第一季度,全球勒索攻击损失突破150亿美元,某跨国制造企业因数据库未加密被勒索3000枚比特币,某省级医保系统遭攻击导致参保人信息泄露……当医疗数据、金融资产、知识产权成为黑客的提款机,数据库加密已从技术选项升级为生…...
next中的server comonent中如何共享session
在 Next.js 的服务器组件(Server Components)里共享会话(session),可以借助第三方库(如 next-auth 或 express-session 结合自定义 API 路由)来实现,下面为你详细介绍这两种常见的实…...
Desfire Ev1\Ev2\Ev3卡DES\3K3DES\AES加解密读写VB.Net示例源码
本示例使用发卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bSxJTb6&ftt&id917152255720 Public Class Form1Public Declare Function pcdbeep Lib "OUR_MIFARE.dll" (ByVal xms As Integer) As BytePublic Declare Fu…...
商业实战将归巢网内容构建为本地RAG模型的完整指南01-优雅草卓伊凡
商业实战将归巢网内容构建为本地RAG模型的完整指南01-优雅草卓伊凡 今天卓伊凡收到了老客户归巢网关于对本地RAG模型建立的咨询,这点也让卓伊凡得深入研究下,毕竟老客户肯定不是说着玩的,主要最终实现目的是建立模型开始使用AI智能问答。 一…...
langchain4j整合springboot
环境介绍 JDK17Spring Boot: 3.0.2 创建springboot工程 IDEA新建一个springboot项目,使用Spring lnitializr快速构建。 选择Spring Boot: 3.0.2以及Spring Web依赖 添加maven依赖 创建完springboot项目之后,在pom中添加关键依赖 <properties&g…...
在线时间戳转换工具
给大家推荐一个在线时间戳转换工具 点击跳转-鸽鸽在线工具 这个工具除了时间戳转换,到首页还能选择使用很多其他小工具,欢迎使用...
Codeforces Round 1023 (Div. 2) (A-D)
每周至少五篇博客:(1/5) A. LRC and VIP 题意 您有一个大小 n n n 的数组 a a a - a 1 , a 2 , … a n a_1, a_2, \ldots a_n a1,a2,…an 。 您需要将 n n n 元素分为 2 2 2 序列 B B B 和 C C C ,以满足以下条件: 每个元素…...
[Survey]Remote Sensing Temporal Vision-Language Models: A Comprehensive Survey
BaseInfo TitleRemote Sensing Temporal Vision-Language Models: A Comprehensive SurveyAdresshttps://arxiv.org/abs/2412.02573Journal/Time2024 arxivAuthor北航 上海AI LabCodehttps://github.com/Chen-Yang-Liu/Awesome-RS-Temporal-VLM 1. Introduction 传统遥感局限…...
Linux56 YUM源配置
epel未启动 显示系统未通过注册 配置YUM仓库 本地YUM仓库 1.备份 tar -zcf repo.tar.gz *.repo 2.挂载 mount -o ro /dev/sr0 /mnt 3.开机自启 chmod x /etc/rc.local echo ‘mount -o ro /dec/sr0 /mnt’ /etc/rc.local 4.编写本地YUM仓库 local.repo [local] namelocal yum …...
mysql 如何查询数据库链接日志
1,查看是否开启日志 SHOW GLOBAL VARIABLES LIKE general_log; -- 查看是否开启通用查询日志(包括连接记录) 1.1,假如没开启,可以临时开启,做测试;服务重启,配置失效…...
Element-Plus-X开源程序是Vue3 + Element-Plus 开箱即用的企业级AI组件库前端的解决方案
一、软件介绍 文末提供程序和源码下载 Element-Plus-X开源程序是Vue3 Element-Plus 开箱即用的企业级AI组件库前端的解决方案。 二、核心特性 ✨ 企业级 AI 组件:内置聊天机器人、语音交互等场景化组件🚀 零配置集成:基于 Element-Plus …...
基于DevSecOps敏捷框架的数字供应链安全应解决方案
基于DevSecOps敏捷框架的数字供应链安全应解决方案是以“AI智能代码疫苗技术”深度赋能原创专利级“多模态SCADevSecOpsSBOM情报预警”的第四代DevSecOps数字供应链安全管理体系,在DevSecOps敏捷安全体系建设、数字供应链安全审查、开源供应链安全治理和云原生安全体系建设四大…...
2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛初赛-wp
- -考试当场没做出来 后面做的 misc ❯ cd misc ❯ ls num.docx num.zip ❯ unzip num.docx Archive: num.docxinflating: [Content_Types].xmlinflating: _rels/.relsinflating: word/document.xmlinflating: word/_rels/document.xml.relsextracting: word/media/image1.jp…...
2、实验室测控系统 - /自动化与控制组件/lab-monitoring-system
76个工业组件库示例汇总 实验室测控系统开发组件 这是一个专为实验室设备数据采集与分析设计的可视化测控系统组件。采用工业风格界面设计,提供了丰富的动态数据展示与分析功能,可应用于各类实验室环境中的设备监控和数据处理。 功能特点 多设备管理…...
Blender插件机制设计与Python实现
Blender插件机制设计与Python实现 Blender的插件机制是其强大扩展性的核心,允许开发者通过Python创建自定义功能。下面我将详细介绍Blender插件系统的设计原理,并提供一个完整的示例。 Blender插件系统设计原理 模块化架构:Blender将插件作…...
自定义一个 Spring Boot Starter -笔记
SpringBoot Starter的介绍参考: Spring Boot Starter简介-笔记-CSDN博客。这里介绍如何自定义一个springBoot Starter。 1. 项目结构 创建一个 Maven 项目,结构如下: custom-spring-boot-starter-demo/ ├── custom-hello-jdk/ # jdk模…...
【Part 2安卓原生360°VR播放器开发实战】第三节|实现VR视频播放与时间轴同步控制
《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化,以及高分辨率视频性能优化等实战技巧。 📝 希望通过这个专栏&am…...
读 书 说
好久没有坐下来手敲打字去输出或者记录分享一些比较正式的事情。 今天节后综合征,虽然我已经加了两天班了,但是还是不想加班便准点下班了。 今天来聊聊看书。 为什么会看书?最开始正如我之前提到过,人脉资源不多,也不…...
DOCX转PDF怎么操作最简单?快速将DOCX转换为专业PDF文档
在日常办公或学习中,我们经常需要将 Word 文档(.docx格式)转换为 PDF 文件。这不仅有助于保持文档格式的一致性,还能确保接收者无需特定软件即可查看文件内容。本文将详细介绍几种常见的方法来实现从 DOCX 到 PDF 的转换ÿ…...
免费轻量化办公pdf修改软件 一键格式转换基础修改到高级加密
各位办公软件小能手们!今天咱来聊聊一款超厉害的 PDF 编辑软件——PDFXEdit。你知道吗,这软件就像个 PDF 处理的超级魔法师,能全方位搞定 PDF 文档。下面我就给大家详细说说它的那些功能和适用场景。 首先是基础编辑功能。这软件在文本与图像…...
【HFP】蓝牙语音通信高级功能解析:快速拨号与呼叫等待协议实现
在蓝牙语音通信系统中,除了基础的通话建立与控制流程,高级功能如快速拨号(内存拨号、最后号码重拨)和呼叫等待通知的实现,直接影响着用户体验的便捷性与系统的实用性。这些功能依赖于蓝牙协议中特定的 AT 命令交互、状…...
CVE-2025-24813:Apache Tomcat RCE 漏洞分析
CVE-2025-24813 是 Apache Tomcat 中的一个严重远程代码执行 (RCE) 漏洞,源于路径等效缺陷,允许攻击者绕过安全约束并远程执行任意代码。 CYFIRMA 的研究发现了一些活跃的漏洞利用,一些 PoC 漏洞在地下论坛上流传。攻击者利用基于 HTTP PUT 的任意文件上传、NTFS 连接漏洞利…...
神经网络之训练的艺术:反向传播与常见问题解决之道
神经网络训练的艺术:反向传播与常见问题解决之道 摘要 神经网络是现代机器学习的核心工具之一,而反向传播则是其训练过程中不可或缺的算法。本文深入探讨了反向传播的工作原理以及在训练过程中常见的问题,如梯度消失、梯度爆炸、死 ReLU 单…...
小土堆pytorch--transform
torchvision中的transform torchvision中的transform1. transforms的使用1.1 transforms的结构及用法理论1.2 相应代码1.3 对上述代码的解释 2. 常见的transforms2.1 python 的call函数2.2 ToTensor的使用2.3 Normalize的使用2.4 Resize的使用2.5 Compose的使用2.6 RandomCrop的…...
【Django】REST 常用类
ModelSerializer serializers.ModelSerializer 是 Django REST framework(DRF)里的一个强大工具,它能极大简化序列化和反序列化 Django 模型实例的流程。下面从多个方面详细介绍它: 1. 基本概念 序列化是把 Django 模型实例转化…...
PyTorch常用命令详解:助力深度学习开发
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
第二章 Logback的架构(二)
Logger, Appenders 和 Layouts Appenders 和 Layouts 基于日志记录器选择性地启用或禁用日志记录请求只是其中的一部分功能。Logback允许将日志记录请求输出到多个目标。在Logback术语中,输出目标被称为Appender。 目前,已经存在适用于控制台、文件、远…...