- 博客(135)
- 收藏
- 关注
原创 C++零基础到工程实战(3.4):入口函数 main 参数传递和环境变量获取
本文详细讲解了C++中main函数的参数机制。主要内容包括:1)main函数的三种常见写法(无参、带参数、带环境变量);2)argc和argv的含义,其中argc表示参数总数(包含程序名),argv是字符串数组(argv[0]为程序名);3)环境变量env的获取与使用;4)在Visual Studio中设置命令行参数的方法;5)强调命令行参数和环境变量在工程开发中的重要性,如调试模式、配置文件路径等场景的应用。文章通过示例代码演示了参数访问的正确方法,并指出命令行参数本质上都是字符串类型。
2026-04-12 05:07:56
213
原创 C++零基础到工程实战(3.3):枚举 enum 类型和 C++11 新特性分析
本文详细讲解了C++中的枚举类型(enum),重点对比了C++11前后枚举的变化。传统enum存在命名污染、隐式转换等问题,而C++11引入的enumclass通过作用域限定和类型安全机制解决了这些问题。文章从枚举的本质、定义方式、赋值规则入手,通过实例代码分析了普通enum和enumclass的区别,包括访问方式、类型转换、比较操作等特性,并解释了static_cast<int>的使用场景。最后总结指出:enumclass比普通enum更规范、更安全,更适合现代工程开发,是C++11推荐的枚举
2026-04-12 00:11:02
265
原创 C++零基础到工程实战(3.2.2):string 常用操作——长度获取、截取、判断、比较、转换、拼接与查找替换
本文系统介绍了C++中std::string类的常用操作,包括:1. 基本操作:定义与赋值、获取长度(size)、获取容量(capacity)、判空(empty)、字符串比较(==) 2. 核心功能:截取子串(substr)、数字与字符串转换(stoi/to_string)、字符串拼接(+) 3. 高级操作:内容查找(find)与替换(replace) 4. 重要特性:substr不修改原字符串,replace会修改原字符串,find失败返回npos 5. 注意事项:中文字符长度与编码相关,size()不包
2026-04-11 04:54:21
359
原创 C++零基础到工程实战(3.2.1):string 入门——字符、字符串字面量、const char* 与 string 对象与内存管理详解
本文系统讲解了C++中std::string的基础概念与内存管理。首先区分了char、字符串字面量和string对象的区别:char表示单个字符,双引号中的内容是字符串字面量(const char[]),而std::string是标准库中的字符串类对象。重点阐述了string对象的内存特性:局部string对象本身在栈区,其内部管理字符串内容,较长字符串常借助堆空间,短字符串可能直接存在对象内部(SSO优化)。通过对比const char*和string,强调了string作为类对象的优势:自动管理内存、提
2026-04-11 04:52:00
248
原创 C++零基础到工程实战(3.1):if语句、bool类型、算数逻辑比较运算符深入解析
本文系统讲解C++中的逻辑判断与条件控制。重点解析if-else语句的基础语法与常见错误(如多余分号、误用赋值运算符);深入剖析bool类型的本质及与算术/逻辑运算符的区别;介绍位运算操作与bitset输出方法;强调逻辑运算符的短路求值特性及其效率优势。通过示例代码演示了条件判断、bool运算、位操作等核心概念,帮助读者掌握C++程序流程控制的关键技术,为后续开发奠定基础。
2026-04-09 11:14:16
517
原创 C++头文件详解:<iomanip> 头文件使用详解
本文系统介绍了C++中<iomanip>头文件的格式化输出功能。主要内容包括:1)浮点数精度控制(fixed/setprecision/scientific);2)输出宽度与对齐设置(setw/left/right/setfill);3)整数格式控制(hex/oct/dec);4)布尔值格式化(boolalpha)。通过RGB转YUV计算和成绩表格输出等示例,展示了如何利用这些工具实现专业化的数据展示。文章强调合理使用这些格式化方法可以显著提升输出结果的可读性和美观性,适用于调试、实验数据展示等
2026-04-09 09:50:20
696
原创 VS Code 如何运行 C++ 程序?从 .cpp 到 .exe 一文讲透
本文系统梳理了在VSCode中运行C++程序的完整流程。C++作为编译型语言,需要先将.cpp源代码编译链接生成.exe可执行文件才能运行。文章解析了VSCode中"运行""调试""RunCode"等按钮的区别:编译生成.exe、启动程序、调试运行三者的不同功能。同时解释了g++与gcc的区别、tasks.json和launch.json的作用,以及中文路径导致GDB调试失败的原因。建议初学者先通过Ctrl+Shift+B编译生成.exe,再在终端
2026-04-08 15:46:32
602
原创 C++零基础到工程实战(2.5):cpp 的 auto 自动类型推导
本文详细介绍了C++11引入的auto关键字及其使用要点。auto通过编译器自动推导变量类型,简化代码书写,特别适用于复杂类型场景。主要内容包括:auto必须初始化、会保留表达式结果类型、默认忽略顶层const特性,以及与常量、强制类型转换的配合使用。文章对比了=和{}初始化的异同,指出花括号初始化更严格,能防止缩窄转换。最后强调auto虽简化代码但仍遵循严格的类型规则,建议工程中合理使用auto以提高代码可维护性。
2026-04-08 14:08:20
327
原创 C++零基础到工程实战(2.4):运行时常量与编译时常量
本文系统讲解了C++中常量的概念与应用,重点区分运行时常量(const)和编译时常量(constexpr)。运行时常量用于程序运行期间不可修改的变量,而编译时常量要求值在编译期确定,可用于数组大小等场景。文章详细阐述了二者的语法定义、使用区别和典型应用,包括函数参数保护、模板参数传递等。通过示例分析,说明如何正确选择常量类型以提高代码安全性、可读性和执行效率。最后给出实用建议:编译期确定的值优先使用constexpr,运行时值使用const,函数参数尽量添加const修饰。
2026-04-08 05:59:26
520
原创 C++零基础到工程实战(2.3):变量的作用域和生命周期
本文介绍了C++中变量作用域与生命周期的概念。作用域决定了变量的可访问范围,分为局部变量(大括号内有效)和全局变量(整个程序有效)。生命周期指变量内存分配和释放的时段:局部变量随大括号开始和结束,全局变量贯穿整个程序。建议优先使用局部变量,减少全局变量使用,以增强代码安全性和可维护性。理解这两个概念有助于内存管理,避免未定义行为。
2026-04-08 00:07:06
207
原创 C++零基础到工程实战(2.2):变量的算术运算与浮点数计算、类型转化
本文主要讲解C++中变量的算术运算和类型转换规则。首先介绍了变量定义语法和字面量概念,指出整数字面量默认按int处理,小数字面量默认按double处理。详细讲解了算术运算符的使用,包括基本运算、复合赋值和自增自减运算,强调前置和后置的区别。重点分析了整数除法会丢弃小数部分的特点,以及浮点数转整数会直接截断而非四舍五入的规则。最后说明要保留小数结果必须在运算前就确保至少有一个浮点数参与运算,并介绍了static_cast的推荐用法。全文通过具体示例帮助理解C++的数据计算规则。
2026-04-07 12:53:34
514
原创 C++零基础到工程实战(2.1):变量定义、初始化与内存分析
本文系统介绍了C++中变量的核心概念。变量是有名字的内存对象,包含名称、类型和内存空间三个属性。文章详细讲解了基本数据类型的内存大小、变量定义语法(推荐统一初始化方式),以及变量初始化的重要性(避免使用未初始化的局部变量)。同时阐述了变量在内存中的存储方式、地址获取方法(使用&运算符)和sizeof操作符的用法,并解释了栈空间与变量生命周期的关系。最后强调初始化变量的必要性,为后续学习动态内存和指针奠定基础。
2026-04-07 12:52:41
449
原创 C++零基础到工程实战(1.3):cpp注释与输出详解
本文介绍了C++编程中的三个核心概念:注释、cout输出和命名空间。注释分为单行(//)和多行(/.../)两种,用于提高代码可读性。cout是标准输出对象,支持多种数据类型输出,endl可实现换行和缓冲区刷新。命名空间(如std)可避免名称冲突,简化标准库调用。这些基础概念对团队协作、调试和大型项目开发至关重要,为后续学习多线程和循环编程奠定基础。
2026-04-06 18:35:19
171
原创 C++零基础到工程实战(1.2):cpp从源代码到可执行文件及每种文件作用
本文详细讲解了C++程序从源代码到可执行文件的完整生成流程。首先介绍了.cpp源文件和.h头文件的作用,以及编译后生成的.obj目标文件和最终.exe可执行程序的关系。重点阐述了五个关键步骤:预处理(处理宏和头文件)、编译(转汇编代码)、汇编(生成机器码)、链接(合并目标文件)和最终执行。通过分析HelloWorld示例,说明了一个C++程序需要经过预处理、编译、汇编、链接才能生成可执行文件,并强调了main函数的唯一性和.pdb调试文件的作用。掌握这一流程有助于开发者理解C++程序的构建过程,为后续工程开
2026-04-06 18:04:46
362
原创 C++零基础到工程实战(1.1):理解第一个简单且重要的cpp程序
这篇文章详细解析了C++入门程序"Hello World"的代码结构。主要包含以下几个关键点: #include<iostream>用于引入标准输入输出功能; main()函数作为程序入口; std::cout是标准输出对象; <<运算符用于输出内容; 双引号内的"Hello World!\n"是字符串,\n表示换行; 分号表示语句结束; 大括号{}界定代码块范围。 文章通过拆解每个语法元素,帮助初学者理解C++程序的基本结构和执行流程,包括头
2026-04-03 08:36:36
650
原创 路径跟踪算法详解:Pure Pursuit 与 LOS 的原理、公式推导与对比分析
本文系统分析了PurePursuit和LOS两种经典路径跟踪算法的原理与应用。PurePursuit通过预瞄点构造圆弧路径,直接输出转向控制量,适用于Ackermann转向车辆;LOS则基于前视点和横向误差计算期望航向角,更适合USV/AUV等航行器系统。两者都采用前视思想避免振荡,但输出量和适用对象不同:PurePursuit侧重转向控制,LOS侧重航向导引。参数整定方面,预瞄距离和前视距离都影响系统响应速度和平稳性。这些几何型算法具有直观、简单、易实现的优点,是连接规划层与执行层的关键桥梁。
2026-03-31 12:29:58
834
原创 USV运动控制基础(二):路径跟踪与航向控制方法详解
无人艇控制系统中的航向控制与路径跟踪是核心内容。航向控制解决艇首朝向问题,路径跟踪则确保艇体整体沿预设路径前进。工程中常采用分层结构:导引层生成期望航向,控制层实现航向跟踪,执行层完成实际动作。 PID控制因其简单直观在基础航向控制中常用,但对强扰动和复杂工况适应有限。LOS导引通过前视点思想将路径误差转化为期望航向,具有实现简单、平滑性好的优点。此外,纯跟踪、Stanley、LQR和MPC等方法各具特色,适用于不同场景。 面对侧风、侧流等扰动时,可采取积分补偿、扰动观测、自适应控制等措施提高鲁棒性。这些控
2026-03-31 12:28:44
459
原创 USV运动控制基础(一):无人艇运动学与动力学模型如何建立
本文系统介绍了无人艇(USV)运动学与动力学建模的基本方法。首先阐述了建模的必要性:作为控制算法设计、仿真验证和理解运动规律的基础。然后详细说明了USV三自由度平面模型的建立过程,包括坐标系定义、状态量描述、运动学方程和动力学方程推导。重点分析了USV特有的水动力耦合效应、非线性阻尼特性以及环境扰动影响。文章还针对双推进差速和舵桨式两种典型推进构型,分别阐述了输入建模方法。最后总结了USV建模的一般步骤,强调合理的建模是后续控制算法开发的基础。全文从工程应用角度出发,为USV控制系统的开发提供了理论基础。
2026-03-30 22:37:02
494
原创 USV学习(二):水面无人艇常见硬件有哪些——主控、RTK、推进器、通信模块详解
本文系统介绍了水面无人艇(USV)的硬件组成及工程实现要点。文章将USV硬件分为七大模块:平台结构、导航定位、主控计算、动力执行、通信链路、任务载荷和能源配电,详细阐述了每类硬件的功能、选型要点和安装位置。重点讲解了主控飞控、GPS/RTK定位、IMU惯导、推进系统等核心部件的连接方式和布放原则,并对比了不同应用场景下的典型硬件配置方案。文章结合ArduPilot官方文档,分析了单推进+舵机转向与双推进差速两种常见控制架构的特点,强调USV是一个由感知、控制、执行、通信等子系统协同工作的完整系统。最后针对初
2026-03-30 16:42:32
536
原创 Ardusub入门(四):ArduSub 快速上手:QGroundControl 安装与固件刷写
本文介绍了ArduSub水下机器人控制系统中QGroundControl地面站软件的安装与使用流程。QGroundControl作为关键的人机交互界面,承担着设备连接、固件刷写、参数配置等核心功能。文章详细讲解了QGroundControl在Windows和Ubuntu系统下的安装方法,重点阐述了ArduSub固件刷写的完整步骤,包括飞控连接、固件选择、写入流程等关键环节。同时强调固件刷写只是系统调试的第一步,后续还需完成框架选择、传感器校准等配置工作才能使水下机器人正常运行。全文为ArduSub初学者提供
2026-03-29 23:07:46
481
原创 USV学习(一):一文读懂水面无人艇——每个硬件模块到底负责什么
水面无人艇是由艇体、动力系统、导航控制、通信感知和任务载荷等模块组成的智能系统。艇体提供稳定平台,推进系统执行航行指令,导航传感器实时定位,主控模块进行决策计算,感知系统采集环境数据,通信模块实现岸艇交互,能源系统保障续航能力。各模块协同工作,实现自主导航、路径规划、环境监测及多艇集群协同等功能,形成"感知-决策-执行-通信"的闭环工作流程。模块化设计提升了系统灵活性,使无人艇能适应不同任务需求。
2026-03-27 23:25:06
382
原创 从C++结构体、类到 PID 控制器:运动控制初学者如何理解 C++ 工程代码
本文从工程化角度解析C++代码组织方法,重点讲解struct与class的选择、头文件与源文件的区别、类的基本概念以及PID控制器的实现。文章指出,struct适合纯数据封装,class适合带行为的对象;头文件负责声明接口,源文件实现具体逻辑。通过PID控制器的示例,详细阐述了类的构造、成员变量与函数、访问控制等概念,并给出适合小车底盘控制的标准PID类实现方案。该方案具有结构清晰、封装完善、支持限幅等特点,可直接应用于双轮差速底盘的速度控制场景。文章帮助初学者理解C++工程开发的核心思想,掌握模块化编程方
2026-03-27 22:26:52
543
原创 ArduSub 入门(三):ArduSub开发:源码获取、编译与自定义框架设定
本文面向开发者系统介绍了 ArduSub 的源码获取、编译流程与自定义框架设定方法。首先说明了为何不建议直接在 master 分支上开发,而应以 ArduSub-stable 为稳定基线创建本地工作分支,以保证版本一致性与调试可复现性。随后结合 Waf 构建系统,梳理了固件编译、本地上传与远程刷写的基本流程。在此基础上,重点分析了 AP_Motors6DOF 在自定义 frame 中的作用,阐明了自定义框架的本质并非简单增删电机,而是根据推进器布局、安装方向及力矩关系建立六自由度混控因子,并写入自定义配置入
2026-03-26 18:44:42
858
原创 ArduSub 入门(二):ArduSub 支持哪些车架:Frame、推进器布局与混控关系
本文探讨了ArduSub水下机器人控制系统中的Frame概念及其与混控的关系。Frame并非简单的外壳样式,而是推进器数量、安装位置、朝向及其负责自由度的综合定义,直接影响机器人的控制能力。文章分析了ArduSub支持的典型Frame类型,并解释了混控如何将运动意图转化为各推进器的具体输出。重点指出推进器布局变化会直接影响控制逻辑,而外观变化则未必。最后总结了配置时常见的错误类型,强调Frame选择、推进器接线和混控设置必须严格匹配,才能确保水下机器人的正确运动控制。
2026-03-26 09:09:30
483
原创 ArduSub 入门(一):ArduSub 系统组成:飞控、树莓派、QGC 和外设如何协同
本文系统阐述了ArduSub水下机器人控制系统的整体架构与协同机制。文章指出ArduSub并非单一飞控固件,而是由飞控层(实时控制)、伴随计算机层(网络桥接)、地面站层(人机交互)和外设层(感知执行)构成的完整体系。详细分析了各硬件组件(Pixhawk飞控、树莓派、摄像头、推进器等)的功能定位,以及三大核心软件(飞控固件、伴随计算机软件、QGroundControl)的协同关系。特别强调飞控与伴随计算机是分工协作而非主从关系,澄清了初学者常见的认知误区。通过揭示系统分层设计原理,展现了ArduSub兼顾基础
2026-03-25 20:16:53
581
原创 一文搞懂 MAVROS 和 MAVLink 的关系:初学者快速入门
摘要:MAVLink与MAVROS是无人机/机器人开发中常见的两个概念,但本质不同。MAVLink是面向无人系统的轻量级通信协议,规定了飞控与外部设备间的消息格式;MAVROS则是ROS中的功能包,作为MAVLink与ROS系统的"翻译层",将飞控的MAVLink消息转换为ROS话题/服务等标准接口。两者的关系是:MAVLink是底层协议,MAVROS是基于该协议的上层封装。实际系统中,飞控通过MAVLink通信,ROS算法通过MAVROS接入飞控,形成完整控制闭环。理解这种分层架构(飞
2026-03-25 18:14:48
824
原创 ArduPilot 之 ArduSub 详解:一文看懂水下 ROV 飞控架构
本文系统介绍了ArduSub水下机器人控制系统的核心概念与架构。ArduSub作为ArduPilot平台的水下专用固件,运行在飞控硬件上,通过MAVLink协议与地面站、手柄等设备通信。文章详细阐述了ArduSub在ROV系统中的核心职责,包括命令接收、状态感知、模式解析和推进器控制等功能模块。重点分析了控制命令链路、不同输入方式的区别以及六种主要工作模式的特点与适用场景。通过系统层面的解读,帮助开发者理解ArduSub如何实现从人工操作到推进器输出的完整控制流程,为水下机器人开发提供技术参考。
2026-03-24 22:36:23
482
原创 从零认识自动驾驶经典规划算法: Hybrid A*、Lattice 与 EM Planner
本文对比分析了自动驾驶规划中的三种经典算法:Hybrid A*、Lattice Planner和EM Planner。Hybrid A通过引入车辆运动学约束改进传统A算法,适合低速复杂场景;Lattice Planner基于预定义运动原语进行图搜索,具有良好可执行性;EM Planner采用路径-速度解耦框架,通过DP+QP组合实现精细轨迹规划。三者分别代表约束搜索、动作拼接和优化结合的规划思路,适用于不同场景需求,工程中常组合使用以兼顾可行性、平滑性和实时性。
2026-03-24 10:40:43
585
原创 Ubuntu 22.04 下使用 VS Code 搭建 ROS 2 Humble 集成开发环境
本文详细介绍了在Ubuntu 22.04系统下搭建ROS2 Humble开发环境的完整方案。重点推荐使用VSCode作为开发工具,通过安装Python、C/C++、CMake、ROS等插件,并配置c_cpp_properties.json、settings.json和tasks.json等文件,有效解决头文件报红、代码跳转失效等问题。文章还详细讲解了Python和C++功能包的创建流程、节点代码编写方法、CMakeLists.txt配置要点,以及如何在功能包中添加多个可执行文件。此外,推荐使用Termina
2026-03-23 22:48:17
696
原创 从 DP 到 QP:一文读懂动态规划、二次规划
本文系统梳理了动态规划(DP)与二次规划(QP)的核心概念与本质区别。DP通过状态定义和递推关系解决离散优化问题,适用于路径搜索等场景;QP则处理连续变量优化,擅长轨迹平滑等任务。二者本质差异在于:DP面向离散状态递推求解,QP通过优化建模处理连续问题。工程实践中常将二者结合使用:DP负责全局路径搜索,QP进行局部轨迹优化。这种"DP找路,QP修路"的组合方式,既能保证路径可行性,又能提升执行质量,在自动驾驶、机器人控制等领域具有广泛应用价值。
2026-03-23 20:57:03
402
原创 Ubuntu 22.04 下调整 VS Code 界面及字体教程
在Ubuntu22.04上使用VSCode时,界面比例失调是常见问题。本文提供分层调整方案:首先通过window.zoomLevel调整整体界面大小;然后用editor.fontSize单独设置代码区字体;最后用terminal.integrated.fontSize调节终端显示。这种组合调整方法能有效解决侧边栏、编辑区和终端显示不协调的问题,避免单一设置导致的其他区域比例失衡,使整个开发界面更加舒适统一。
2026-03-22 23:15:44
494
原创 (4)Ubuntu 22.04 安装后使用 GParted 重新分区实战记录
本文介绍了磁盘分区工具GParted的使用方法。GParted是一款开源的图形化分区编辑器,支持创建、删除、调整分区大小等操作,适合双系统环境。文章详细说明了在Ubuntu/Debian、Fedora/CentOS等系统下的安装方式,以及Windows和macOS下的使用方案。同时讲解了磁盘分区的基础知识,包括分区表类型、文件系统类型和操作风险。最后通过图文展示了GParted的基本功能操作流程,如创建分区、调整大小等,帮助用户安全高效地管理磁盘分区。
2026-03-20 17:13:50
425
原创 (3)Ubuntu 22.04 双系统安装全过程记录
本文详细记录了在Windows系统基础上安装Ubuntu 22.04双系统的完整过程。重点包括:安装前的准备工作(制作启动盘、关闭Secure Boot)、检查磁盘分区格式(GPT/MBR)、进入安装界面的具体步骤、安装过程中的关键设置(语言、键盘、网络、分区类型选择)以及安装确认注意事项。特别针对已有旧版Ubuntu的情况,推荐选择"卸载旧Ubuntu并重新安装"的省事方案。文章强调了安装过程中需要重点关注的几个环节,包括启动方式选择、分区操作确认等,为后续ROS2开发等Linux环境
2026-03-20 16:43:33
701
原创 (2)联想拯救者安装 Ubuntu 双系统前的 BIOS 设置全过程
摘要:本文详细介绍了在联想拯救者电脑上安装Ubuntu 22.04双系统时关键的BIOS设置调整。主要包括:关闭Secure Boot以保证Ubuntu引导、选择UEFI启动模式、设置独显直连(Dynamic Graphics)避免安装问题,以及正确选择U盘启动项等注意事项。文章特别强调,这些设置对解决双系统安装中的常见问题(如无法启动、黑屏等)至关重要,并提供了BIOS选项调整和启动顺序设置的具体指导,为顺利安装Ubuntu双系统奠定了基础。
2026-03-20 06:43:42
587
原创 (1)双系统中Ubuntu22.04启动盘制作与启动盘恢复全过程
本文详细介绍了Ubuntu22.04启动盘制作及恢复的全过程。主要内容包括:Ubuntu镜像下载、启动盘制作步骤、Windows误报格式化问题的解决方法,以及使用DiskGenius将启动盘恢复为普通U盘的操作指南。重点提示了制作过程中易犯的错误:制作后Windows提示格式化时切勿点击、选择磁盘时需仔细核对容量、正确判断启动盘是否制作成功的标准(BIOS能否识别而非Windows能否打开)。文章提供了实用工具推荐和操作注意事项,帮助读者顺利完成Ubuntu系统安装前的准备工作并避免常见失误。
2026-03-20 05:10:25
563
原创 佑驾创新控制算法面经
本文摘要:文章系统介绍了车辆控制领域的核心概念和方法。首先区分了车辆运动学与动力学控制,前者关注几何运动,后者考虑力/质量等物理因素。其次详细解析了LQR控制中消除稳态误差的技术,包括LQI积分和前馈补偿。随后探讨了油门控制、超前/滞后矫正设计、路径规划数据传输等实际问题。最后对比了MPC与LQR的差异,并介绍了最小二乘法原理。全文通过数学模型、伪代码和工程实例,全面阐述了智能车辆控制的关键技术,为自动驾驶系统开发提供了理论框架和实践指导。
2026-01-08 18:47:38
2000
原创 研发工程师机考编程题(一)
本文摘要: 本文包含三个编程题的解题思路与代码实现:1.汽水兑换问题(数学推理),通过空瓶兑换推导出公式ans=n/2;2.排序去重问题(数据处理),使用排序和相邻比较实现去重;3.16进制转换问题(字符处理),重点讲解字符转数值和位权计算的方法。每个题目都分析了核心考点、易错点和优化方案,提供了C++实现代码,并强调了对边界条件、数据类型和算法效率的注意事项。
2026-01-07 11:45:33
917
原创 C++ 基础八股文(基础面试题)
本文系统介绍了C++程序的内存模型与关键语言特性。主要内容包括:1. 内存布局详解:代码区、静态存储区、堆区、栈区、常量区的分布与特点;2. 动态内存管理:new/delete与malloc/free的本质区别,包括构造/析构、失败行为等关键差异;3. 变量作用域与生命周期:局部变量、静态变量、全局变量的存储位置与可见性规则;4. 核心语言特性:const/volatile/constexpr的用法与区别,指针与引用的本质差异;5. 面向对象机制:构造/析构顺序、多态实现原理,以及重载、重写、重定义三种多态
2026-01-06 15:59:44
1480
原创 C++ 智能指针(末):new vs unique_ptr 终极对比 + “指针成员到底是不是创建对象”一次讲透
本文对比了C++中裸指针和unique_ptr在工程实践中的关键差异。传统new/delete写法存在四大风险:人工维护对称性易漏、异常路径不可控、默认拷贝导致双重delete、悬空指针风险。而unique_ptr通过语言机制自动管理生命周期,天然保证异常安全,编译期禁止拷贝,并明确表达所有权语义。文章澄清常见误区:成员变量声明本身并不创建对象,真正的对象创建发生在new或make_unique时。unique_ptr的核心价值在于在类型层面明确对象所有权和生命周期绑定,而非仅是自动释放。对于车辆运动控制等
2026-01-05 23:33:26
1021
原创 C++ 智能指针(下):车辆运动控制 ROS 工程实战(生命周期设计 + 可运行代码)
本文从工程实践角度探讨智能指针在车辆控制中的应用。智能指针的本质是"所有权关系的类型化表达",而非简单的自动delete功能。在车辆控制系统中,常见问题如控制器销毁但回调仍在执行等,往往源于生命周期管理不当。文章提出四种典型资源的所有权处理方式:1) 控制器内部算法对象(如PID)使用unique_ptr明确独占所有权;2) 共享数据(如轨迹)采用shared_ptr<const T>;3) 回调引用上层对象使用weak_ptr避免循环引用;4) ROS2消息回调参数使用sh
2026-01-05 22:33:38
1018
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅