自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我的博客主要是用来给我自己复习的,主要是上传一些知识点,小型的项目和功能模块,如果有什么问题或错误麻烦联系我!

目前主要更新虚幻引擎相关的内容,C++和Linux或者算法相关的问题,这些东西的笔记我都写iPad上了,我会陆续搬运上来.

  • 博客(91)
  • 收藏
  • 关注

原创 Linux进程组 会话

cmd2) &”,组成单个后台进程组;1. 定义:多个进程的集合,有唯一PGID,通常等于组长进程PID,组长结束不影响组存在,直到最后一个进程终止。2. 核心作用:批量管理进程,如终端关闭时统一发送信号;◦ 后台进程组通过“jobs”查看,用“kill %任务号”可终止整个组。◦ 管道命令按Ctrl+C时,进程组内所有进程同时终止,避免遗漏;◦ 前台进程组可接收终端输入和信号,后台则不能;◦ 管道符连接命令,自动组成前台进程组;◦ 一个进程同一时间仅属一个进程组;◦ 子进程默认继承父进程的进程组。

2026-03-23 02:58:29 6

原创 C++ STL库_双端队列dqueue

std::deque是分段连续的双端队列,兼顾vector的随机访问和list的双端高效操作,扩容成本极低;核心接口支持双端插入()、双端删除()和随机访问([]/at()使用场景:优先用于需要 “首尾操作 + 随机访问” 的场景(如队列 / 栈的底层实现、滑动窗口算法),避免用于大量中间插入 / 删除的场景。

2026-02-23 01:05:20 875

原创 C++ STL库_队列queue

C++中的queue是一种遵循FIFO(先进先出)规则的容器适配器,默认底层使用deque实现。核心特性包括:只能在队尾插入(push/emplace)、队首删除(pop),仅能访问首尾元素(front/back),不支持随机访问和遍历。queue通过封装底层容器(deque/list)的接口,严格限制操作以符合队列逻辑。使用需注意:pop()不返回元素、操作空队列会导致未定义行为。queue的适配器设计体现了"封装+限制"的思想,使其成为实现排队系统的理想选择。

2026-02-22 23:46:40 885

原创 Linux_UDP聊天服务器

【代码】Linux_UDP聊天服务器。

2026-02-13 22:11:59 352

原创 关于Linux服务器的协作问题

摘要:使用VSCode Remote-SSH开发时,建议两台电脑使用同一Linux用户账号(如Howrun1)登录服务器,避免权限问题。同一个账号可同时多终端连接,但需注意:同时修改同一文件会导致覆盖冲突,修改不同文件则无影响。不同账号会带来权限管理问题,不推荐。虽然Git非必须用于同步(因文件直接存储在服务器),但强烈建议使用Git进行版本控制(防误操作)、异地备份(防服务器故障)和分支管理(安全开发)。最佳实践是服务器本地Git+定期推送远程仓库,既保持开发流畅又确保代码安全。

2026-02-08 11:57:51 646

原创 VSCode烦人的远程交互UI讲解

本文详细介绍了如何在VSCode中配置Remote-SSH插件进行远程开发。主要内容包括:1) 准备工作,确保本地和远程环境满足要求;2) 安装Remote-SSH插件;3) 两种配置SSH连接的方法(快速添加和手动编辑config文件);4) 配置更安全的密钥认证;5) 连接远程服务器的具体步骤;6) 远程开发的基础操作指南。文章提供了从环境准备到实际操作的完整流程,并重点说明了配置文件管理和密钥认证等高级配置技巧,帮助开发者高效建立安全的远程开发环境。

2026-02-06 18:31:31 960

原创 C++_错误处理

C++ 错误处理有返回码、assert、异常三种核心方式,异常是运行时错误的首选,assert 仅用于调试阶段的逻辑检查;异常机制的核心是+ 栈展开,捕获时需遵循 “派生类在前、基类在后”,优先捕获const引用;异常安全的核心是RAII,通过栈对象析构自动释放资源,避免泄漏;noexcept用于声明函数的异常行为,自定义异常应继承,且析构函数绝对不能抛出异常。

2026-02-03 10:59:01 879

原创 C++_竞态_底层原理解释

C++竞态条件是指多线程同时访问共享资源时,由于执行顺序不可控导致结果不可预测的问题。典型表现为多个线程对同一变量进行非原子操作(如counter++)时,由于操作被拆分为读取、修改、写入三步,可能导致数据覆盖。解决方法包括:1)使用互斥锁(std::mutex)强制串行执行临界区代码;2)使用原子操作(std::atomic)将多步操作合并为不可打断的硬件指令;3)避免共享可变资源。互斥锁适用于多步复杂操作,而原子操作适合单变量简单场景。正确使用同步机制可确保多线程程序的正确性和稳定性。

2026-02-02 18:41:19 1124

原创 虚幻引擎_游戏暂停菜单

在虚幻引擎中实现居中暂停菜单的关键步骤:1. 创建继承UUserWidget的C++类处理按钮逻辑,使用BindWidget绑定UMG控件;2. 通过AddToViewport()而非AddToPlayerScreen()确保菜单覆盖整个分屏窗口;3. 在PlayerController中监听ESC按键,仅允许主玩家(Player0)触发暂停;4. 使用SetGamePaused控制游戏暂停状态,SetInputMode管理输入模式;5. UMG设计时确保锚点居中,按钮命名与C++变量严格匹配。这种架构将系

2026-02-02 12:13:42 1412

原创 虚幻引擎_C++_游戏开始菜单

如果要做一个开始菜单,实现的方法有很多。

2026-02-01 16:21:38 462

原创 虚幻引擎关卡相关的问题

引擎自动加载了默认模式:你的项目设置里已经把那个写了生成逻辑的类设为默认了。模式一直都在:GameMode 不是通过 OpenLevel 传过去的物体,它是关卡(Level)本身的“规则管理器”。只要关卡开了,模式就自动创建了。参数读取成功:虽然你只传了 Players=1,但只要模式类被加载了,它就会从 OptionsString 变量里把这个 1 读出来执行逻辑。你可以尝试把 项目设置 -> 地图和模式 -> Default Game Mode 改回引擎自带的 GameModeBase。

2026-02-01 16:05:29 696

原创 C++ 中emplace系列函数

C++容器的emplace系列函数通过定位new和完美转发实现原地构造,直接在预分配内存上调用元素构造函数,避免临时对象的创建和拷贝。相比push操作,emplace能自动匹配任意构造函数,显著提升效率,尤其适用于不可拷贝对象和大对象。其核心机制是:容器分配内存后,使用placement new在该地址直接构造对象,并通过完美转发将构造参数原样传递,实现高效的对象创建。

2026-02-01 04:36:25 617

原创 函数名与函数指针的底层原理

函数名本质上是函数代码在内存中的入口地址指针。从物理层面看,它指向代码段中的指令起始位置;语法层面,函数名会自动转换为函数指针;编译层面,它是链接器处理的符号。验证代码显示,直接使用函数名和取地址操作都指向同一内存位置,证明函数名即地址。调用函数时,CPU通过该地址跳转执行指令。

2026-02-01 04:06:51 404

原创 可调用对象

本文系统介绍了C++中的5类可调用对象:普通函数/函数指针、类的成员函数、函数对象、Lambda表达式和绑定对象。可调用对象本质是能通过"()"调用的实体,是线程池和异步编程的基础。文章通过示例代码展示了每类对象的定义、特点和调用方式,并对比了它们的核心共性与区别。重点强调了Lambda表达式的灵活性和std::function的统一包装作用,指出可调用对象的价值在于提供"统一执行接口",是C++泛型编程的关键基础。最后总结了线程池利用std::bind将任意可调用对

2026-02-01 04:05:28 586

原创 C++可变模板参数详细讲解

本文简明解释了C++可变参数模板的核心机制。重点说明了三点:1)模板参数中的typename...Args表示将任意数量的类型打包;2)函数参数中的Args&&...args表示接收对应类型的参数值包;3)使用时的args...表示将参数包拆解。这种机制通过...符号实现打包和拆包功能,使开发者只需编写一个模板函数,编译器就能自动生成处理任意数量参数的具体实现,避免了手动编写多个重载函数的繁琐。文章最后给出了可变参数模板的标准写法模式,强调其本质是简化代码编写的语法糖。

2026-01-31 14:05:26 1162

原创 变量名的本质是什么?

名字类型逻辑含义物理本质 (Runtime)指向的内存区域访问方式全局变量名全局数据绝对地址Data / BSS 段直接读写局部变量名临时数据栈偏移量(如 [ebp-4])Stack (栈)基址 + 偏移函数名代码逻辑入口地址Text (代码段)JMP / CALL对象名结构体实例首地址(同变量)基址 + 成员偏移类/类型名模具不存在(编译后消失)N/A编译期用于计算大小所以,名字只是人类理解逻辑的标签。在底层,一切皆为**地址(指针)和偏移(Offset)**的加减运算。a 的肉体。

2026-01-31 13:10:30 676

原创 C++_bind_可调用对象转化器

本文介绍了C++11标准库中的std::bind函数适配器。其核心功能包括:1)绑定可调用对象的部分参数为固定值,生成参数更少的新函数;2)调整参数顺序以适应不同调用场景。文章详细解析了bind的四种应用场景:绑定普通函数、调整参数顺序、绑定类成员函数(需传入类实例)以及绑定lambda表达式。同时强调了使用注意事项:占位符需来自std::placeholders命名空间、默认参数拷贝语义及引用传递方法(std::ref/cref)。

2026-01-31 11:42:09 1136

原创 函数包装器

文章摘要: C++中的函数包装器(std::function)是一个"万能收纳盒",能将不同类型的可调用对象(函数、lambda、函数对象等)包装成统一类型。在线程池中,std::function<void()>让任务队列能存储各种形态的任务:通过std::bind将带参数的任务转换为无参数形式。相比函数指针,函数包装器支持lambda捕获、成员函数等,具有更好的灵活性和安全性。它是实现线程池任务队列的核心工具,使线程池能够接收和处理各种不同类型的任务。

2026-01-31 11:31:57 605

原创 C++隐式类型转化与explicit关键词

C++隐式转换是编译器自动执行的类型适配机制,分为内置类型和类类型转换。内置类型转换基于安全兼容原则,允许无精度损失的宽化转换;类类型转换通过单参数构造函数或转换函数触发,需满足特定条件且不加explicit修饰。隐式转换仅支持单步转换,不支持链式转换。explicit关键字用于禁止类类型的隐式转换,这是C++工程规范推荐的做法,以避免编译器自动转换带来的潜在问题。理解这些机制有助于编写更安全可靠的C++代码。

2026-01-31 04:38:08 480

原创 UE C++ 开发全生命周期 + 全场景的知识点清单

存储逻辑:Config (存入 .ini), PerObjectConfig (每个对象独立配置), Transient (内存临时,不序列化)。编辑器显示:HideCategories, ShowCategories, CollapseCategories (简化 UI)。抽象性:Abstract (标记为抽象类,不可直接实例化)。内存性质:DuplicateTransient (复制时重置), NonTransactional (撤销操作时不记录)。权限控制。

2026-01-28 23:56:05 746 1

原创 C++ 类间交互

C++跨类通信的核心方法包括:1. 头文件管理:正确使用头文件保护机制和分离声明与实现;2. 对象持有:通过包含头文件创建对象/指针/引用访问其他类;3. 静态成员:共享全局资源时使用静态方法和成员;4. 友元机制:谨慎使用以访问私有成员;5. 前向声明:解决循环依赖问题;6. 抽象接口:通过纯虚函数实现解耦。最佳实践是优先使用public方法访问,避免直接暴露私有成员,复杂场景推荐使用接口降低耦合度。

2026-01-28 12:37:14 599

原创 虚幻引擎_核心框架

本文系统解析了虚幻引擎(UE)的核心框架架构。主要内容包括:1) 分层设计架构,从平台抽象层到游戏框架层的四层结构;2) 多线程模型,分析游戏线程、渲染线程等核心线程的分工协作;3) 模块化系统组织,介绍模块特性及核心模块组成;4) UObject体系,阐释反射、GC等核心机制;5) 游戏框架层的组件化设计;6) 引擎级子系统的功能。文章指出UE框架的核心在于UObject体系、多线程协作和模块化设计,这种架构保证了引擎的高扩展性、跨平台能力和性能表现。

2026-01-28 00:57:54 809

原创 C++ 知识点清单_Blog导航

三次握手(建立连接)、四次挥手(断开连接)、滑动窗口(流量控制)、拥塞控制(慢启动 / 拥塞避免 / 快重传 / 快恢复)、超时重传、粘包 / 拆包问题(解决方案:固定长度 / 分隔符 / 长度字段)。IPv4/IPv6、IP 地址分类(A/B/C 类)、子网划分(子网掩码)、路由协议(RIP/OSPF/BGP)、ARP(地址解析协议)、ICMP(互联网控制报文协议,ping/tracert)。先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)、优先级调度、多级反馈队列。

2026-01-26 07:16:51 554 1

原创 C++ 文件操作速查手册

文件操作核心是「流对象 + 打开模式 + 读写方法」,选对类(ifstream/ofstream/fstream)和模式是基础;文本文件用getline()<<读写,二进制文件用read()write();随机访问依赖seekg()tellg()seekp()tellp(),错误处理需结合eof()fail()clear();批量操作多个文件时,用vector存储流对象并配合移动语义,避免拷贝错误。

2026-01-26 04:42:08 690

原创 C++ 文件操作全知识点详细讲解

C++ 文件操作的核心是流对象 + 打开模式 + 读写方法,核心逻辑可概括为:选对类:ifstream(读)、ofstream(写)、fstream(读写)。选对模式:根据需求组合in/out/app/binary等。规范流程:打开→检查→读写→关闭,做好错误处理。区分场景:文本文件用>>/getline/<<,二进制文件用read/write+binary模式。优化性能:大文件用二进制 + 缓冲区,避免频繁 IO。

2026-01-26 04:29:38 682

原创 Makefile进阶案例_高手专用

Makefile采用三层结构实现自动化编译:源文件层(.cc)、中间产物层(.o)和最终目标层(可执行文件)。关键机制包括:1) 目标文件依赖源文件和头文件;2) 使用-MMD/MD选项自动生成依赖关系(.d文件);3) 通过-include动态加载依赖信息。这种"先编译后补票"的机制解决了传统Makefile需要手动维护头文件依赖的问题,当修改头文件时能自动触发重新编译。典型实现包含:定义编译器和标志、目标文件列表、通用编译规则以及依赖文件包含,既保证了编译正确性又提高了维护效率。

2026-01-26 01:46:26 1479

原创 Linux网络编程_常见API

socket()→ 创建监听套接字bind()→ 绑定 IP + 端口listen()→ 开启监听accept()→ 接受客户端连接,得到通信套接字read()write()(或recv()send())→ 和客户端通信close()→ 关闭套接字。

2026-01-25 23:03:11 711

原创 Linux_C++网络编程四种CS模型

不建议你为客户端绑死一个IP和端口, 这样可能会导致冲突, 因为对于同设备同IP, 不同应用的客户端必须使用不同端口, 系统会自动分配空闲的端口;服务端必须要固定端口和IP, 并且客户端会直接内置服务端的IP和端口号, 不能随便改变, 否则客户端无法正确访问服务端;由于客户端有很多个, 且是动态的, 系统在客户端发送信息时会自动附加客户端的动态IP和端口;

2026-01-25 22:58:45 761

原创 C++ 运算符重载

本文系统讲解了C++运算符重载的核心概念与实现方法。首先明确了运算符重载的本质是函数重载,允许为自定义类型重新定义运算符行为。重点阐述了四大核心规则:只能重载已有运算符、不可改变运算符基本特性、部分运算符禁止重载以及语义一致性要求。通过复数类示例详细演示了双目运算符+的两种重载方式(成员函数和全局/友元函数),并解析了编译器处理运算符调用的底层机制。

2026-01-24 03:09:25 795

原创 C++ 智能指针_详细解释

摘要:C++智能指针基于RAII机制自动管理堆内存,解决裸指针的内存泄漏问题。标准库提供三种核心智能指针:unique_ptr(独占所有权,高效轻量)、shared_ptr(共享所有权,引用计数)和weak_ptr(弱引用,解决循环引用)。使用原则包括优先选择unique_ptr、避免混用裸指针、警惕shared_ptr循环引用。典型内存泄漏场景包括:忘记释放内存、异常导致未释放、shared_ptr循环引用、容器存储裸指针未清理、数组释放错误(delete[]误用)、全局指针未释放等。

2026-01-24 00:02:44 1032 1

原创 Linux_C++_日志实例

Linux_C++_日志实例。

2026-01-22 14:04:56 147 1

原创 C++ 线程实战案例解析

这是 C++ 多线程最核心的安全机制。:真正的 SPSC 优化方案是不使用任何阻塞工具(锁或信号量),而是利用 std::atomic 配合 CPU 缓存一致性协议,实现真正的“零拷贝、零阻塞”。使用者不需要手动调用 sem_init 或 sem_destroy,这些都在 Semaphore 和 RingQueue 的构造函数和析构函数中自动完成。使用者不需要知道内部用的是 sem_wait 还是 pthread_mutex_lock,接口只有简单的 push 和 pop。这才是“不需要锁”的终极形态。

2026-01-22 14:02:56 918 1

原创 信号量(Semaphore)

首选 C++20 标准库:如果你能使用支持 C++20 的编译器(GCC 11+, Clang 11+, MSVC 19.28+),请直接使用 <semaphore>,性能最好且跨平台。遗留系统使用 std::mutex + std::condition_variable:如果必须在旧标准下工作,使用第二部分提供的封装类。避免使用原生的操作系统 API。

2026-01-20 22:20:50 879

原创 C++ 线程互斥锁 lock_guard

摘要:std::lock_guard是C++11提供的RAII风格互斥锁管理类,通过构造函数自动加锁、析构函数自动解锁,确保线程安全。它采用作用域控制锁的生命周期,具有轻量级、异常安全和不可拷贝的特性,能有效防止忘记解锁或异常导致的死锁问题。相比功能更复杂的unique_lock,lock_guard更适合简单的临界区保护场景。通过自动化的锁管理机制,开发者可以更安全高效地实现多线程编程。

2026-01-20 21:05:00 469

原创 虚幻引擎_创建组件

本文介绍了在虚幻引擎中创建和使用移动组件的方法。首先需要创建继承自ActorComponent的Mover组件类,可通过三种方式添加组件:直接添加、蓝图添加或C++代码调用。重点阐述了在C++中创建组件时如何确定类型,通过模板参数直接指定组件类型而无需额外变量存储。文章详细讲解了Mover组件的实现逻辑,包括移动偏移量、移动时间等参数的设置,以及如何在Tick函数中实现平滑插值移动。该组件可控制物体在设定时间内匀速移动到目标位置或返回初始位置,适用于门、平台等需要移动的物体。

2026-01-19 16:51:07 653 1

原创 Linux网络命令

本文介绍了Linux系统中三个高频命令的功能和使用方法:1.ping命令用于测试网络连通性,通过发送ICMP数据包检测目标主机可达性、延迟等,支持-c、-i等参数控制数据包发送;2.netstat命令监控网络状态,可查看连接、端口、路由等信息,常用组合参数如-tulnp查看监听端口及对应进程;3.pidof命令快速查找进程PID,支持-s返回单个PID、-x包含脚本进程等参数。三个命令分别适用于网络连通测试、网络状态监控和进程管理场景。

2026-01-19 16:22:59 533

原创 计算机网络_UDP和TCP

TCP(传输控制协议)和 UDP(用户数据报协议)是,它们的设计理念完全相反 ——TCP 追求,UDP 追求,这直接决定了它们在不同业务场景(尤其是游戏开发)中的选型差异。下面从四个维度,给你讲透两者的差异。

2026-01-19 15:43:01 642

原创 Windows客户端与Linux服务端测试与错误排查

在使用这个测试模板时, 很容易出现一些问题, 如果你第一次启动服务器没有收到任何的消息时, 你不要直接ctrl+z退出, 这样会导致服务器挂在后台, 应该用ctrl+c彻底退出;这个进程(PID 66455)一直没有死,它默默地占用了 8888 端口,并在后台运行(或者是在另一个你不看的 SSH 窗口里)。:因为你的程序会有 std::cout 输出,它可能会时不时在屏幕上打印日志,打断你正在输入的命令(这会很烦)。你再次运行 ./UdpServer,这次没有竞争者了,它成功启动,并在你的当前屏幕上。

2026-01-19 14:08:18 748 2

原创 C++标准线程库-全面讲解

本文全面介绍C++11到C++20的多线程编程特性,涵盖八大核心模块:线程管理(std::thread)、互斥锁(std::mutex家族)、线程同步(std::condition_variable)、异步编程(std::future)、原子操作(std::atomic)以及C++20新增特性(std::jthread、信号量、屏障)。重点解析了线程创建与管理、互斥锁类型选择、RAII锁包装器使用、条件变量等待/通知机制、异步任务处理等关键技术,并对比了不同锁的特性差异。

2026-01-18 18:26:04 766 3

原创 C++线程属性管理(进阶配置)

摘要:C++的std::thread为实现跨平台通用性,不直接支持设置线程堆栈大小、优先级和CPU亲和性等高级特性。开发者需通过native_handle()调用底层系统API实现这些功能:

2026-01-17 13:25:32 515

虚幻引擎项目坦克对战所需模型资源

Tank模型,音效,粒子特效,地图等都在里面,解压后直接点击BattleBlaster.uproject就可以进入项目,然后UE会自动构建其他项目所需的文件,你创建第一个C++类的时候会自动加载入VS, 自动帮你配置文件.

2026-01-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除