UE 5.3 C++ 对垃圾回收的初步认识
一.UObject的创建
UObject 不支持构造参数。
所有的C++ UObject都会在引擎启动的时候初始化,然后引擎会调用其默认构造器。如果没有默认的构造器,那么 UObject 将不会编译。
有修改父类参数的需求,就使用指定带参构造
// Sets default values for this actor's propertiesAMyActor();// AMyActor(const FObjectInitializer& ObjectInitializer);
创建
1. NewObject<T>();
虚幻会管理,它重载了new 和 delete。
myObject = NewObject<UBaseObject>();
2. CreateDefaultSubobject<T>();
RootComponent = CreateDefaultSubobject<USceneComponent>("Root");
只是上一个更通用,下面这个在构造函数里才使用,来创建和管理组件。
二.测试垃圾回收
在你Actor的头文件的中,声明一个UObject·。
UCLASS()
class MYPROJECT_API UBaseObject :public UObject
{GENERATED_BODY()
public:UBaseObject();UBaseObject(const FObjectInitializer& ObjectInitializer);virtual ~UBaseObject();int32 Health = 666;
};
并在Actor里声明它。
public: // Called every framevirtual void Tick(float DeltaTime) override;UFUNCTION(BlueprintCallable)void InitBaseObject();UFUNCTION(BlueprintCallable)int32 GetBaseObjectHealth();//为了避免对象被回收//UPROPERTY() //有对象引用了,就不会被回收UBaseObject* myObject = nullptr;
};
CPP里实现
void AMyActor::InitBaseObject()
{myObject = NewObject<UBaseObject>();myObject->AddToRoot();
}int32 AMyActor::GetBaseObjectHealth()
{if (myObject){return myObject->Health;}return -1;
}UBaseObject::UBaseObject()
{UE_LOG(LogTemp, Warning, TEXT("初始化了"));}UBaseObject::UBaseObject(const FObjectInitializer& ObjectInitializer)
{UE_LOG(LogTemp, Warning, TEXT("初始化了2"));
}UBaseObject::~UBaseObject()
{UE_LOG(LogTemp, Warning, TEXT("垃圾回收"));
}
测试

一旦按下3,垃圾回收。自己的UObject就会被回收掉。
解决方案,加上UPOPERTY,让它被对象引用。
//为了避免对象被回收UPROPERTY() //有对象引用了,就不会被回收UBaseObject* myObject = nullptr;
AddtoRoot,强制不被回收。和允许回收。少用这个方法。
void AMyActor::InitBaseObject()
{myObject = NewObject<UBaseObject>();myObject->AddToRoot();
}
注:标记UPROPERTY 会自动加入root set 阻止垃圾回收
一个Up标记object类指针变量,当指向null时,object会进行析构,自动进行垃圾回收
一个非标记的object类变量,当未添加AddToRoot时,会被下一次垃圾回收,留下野指针。
你通常需要保持对希望保持活跃的任何Object的`UPROPERTY`引用,或者将指向它的指针存储在`TArray`或其他引擎容器类中。
相关文章:
UE 5.3 C++ 对垃圾回收的初步认识
一.UObject的创建 UObject 不支持构造参数。 所有的C UObject都会在引擎启动的时候初始化,然后引擎会调用其默认构造器。如果没有默认的构造器,那么 UObject 将不会编译。 有修改父类参数的需求,就使用指定带参构造 // Sets default value…...
ARM内核:嵌入式时代的核心引擎
引言 在当今智能设备无处不在的时代,ARM(Advanced RISC Machines)处理器凭借其高性能、低功耗的特性,成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集(RISC)的典范,ARM核…...
需求分析应该从哪些方面来着手做?
需求分析一般可从以下几个方面着手: 业务需求方面 - 与相关方沟通:与业务部门、客户等进行深入交流,通过访谈、问卷调查、会议讨论等方式,明确他们对项目的期望、目标和整体业务需求,了解项目要解决的业务问题及达成的…...
【Unity2D 2022:C#Script】DoTween插件的使用
一、插件介绍 DOTween 是一个快速、高效、完全类型安全的 Unity 面向对象的动画引擎,针对 C# 用户进行了优化,免费和开源,具有大量高级功能 二、插件的下载 1. DoTween官网:DOTween (HOTween v2) 2. DoTween下载: …...
【Docker】ubuntu中 Docker的使用
之前记录了 docker的安装 【环境配置】ubuntu中 Docker的安装; 本篇博客记录Dockerfile的示例,docker 的使用,包括镜像的构建、容器的启动、docker compose的使用等。 当安装好后,可查看docker的基本信息 docker info ## 查…...
【数据结构篇】时间复杂度
一.数据结构前言 1.1 数据结构的概念 数据结构(Data Structure)是计算机存储、组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤,所以我们要学各式各样的数据结构, 如:…...
linux 环境安装 dlib 的 gpu 版本
默认使用 pip 安装的 dlib 是不使用 gpu 的 在国内社区用百度查如何安装 gpu 版本的 dlib 感觉信息都不太对,都是说要源码编译还有点复杂 还需要自己安装 cuda 相关的包啥的,看着就头大 于是想到这个因该 conda 自己就支持了吧,然后查了一下…...
springboot集成钉钉,发送钉钉日报
目录 1.说明 2.示例 3.总结 1.说明 学习地图 - 钉钉开放平台 在钉钉开放文档中可以查看有关日志相关的api,主要用到以下几个api: ①获取模板详情 ②获取用户发送日志的概要信息 ③获取日志接收人员列表 ④创建日志 发送日志时需要根据模板规定日志…...
【机器学习】自定义数据集 使用scikit-learn中svm的包实现svm分类
一、支持向量机(support vector machines. ,SVM)概念 1. SVM 绪论 支持向量机(SVM)的核心思想是找到一个最优的超平面,将不同类别的数据点分开。SVM 的关键特点包括: ① 分类与回归: SVM 可以用于分类&a…...
快速提升网站收录:利用网站历史数据
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/38.html 利用网站历史数据可以有效提升网站的收录速度,以下是一些具体的策略和方法: 一、理解网站历史数据的重要性 网站历史数据记录了网站过去的运营情况、用户行…...
【Git】初识Git Git基本操作详解
文章目录 学习目标Ⅰ. 初始 Git💥注意事项 Ⅱ. Git 安装Linux-centos安装Git Ⅲ. Git基本操作一、创建git本地仓库 -- git init二、配置 Git -- git config三、认识工作区、暂存区、版本库① 工作区② 暂存区③ 版本库④ 三者的关系 四、添加、提交更改、查看提交日…...
Python NumPy(11):NumPy 排序、条件筛选函数
1 NumPy 排序、条件筛选函数 NumPy 提供了多种排序的方法。 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性。 下表显示了三种排序算法的比较。 种类速度最坏情况工作空间稳定性…...
AJAX综合案例——图书管理
黑马程序员视频地址: AJAX-Day02-10.案例_图书管理AJAX-Day02-10.案例_图书管理_总结_V1.0是黑马程序员前端AJAX入门到实战全套教程,包含学前端框架必会的(ajaxnode.jswebpackgit),一套全覆盖的第25集视频,…...
JDK自带工具解析与生产问题定位指南(一)
1. 引言 Java开发工具包(JDK)内置了强大的诊断工具集,用于监控、分析和调试Java应用程序。这些工具涵盖了从进程管理、内存分析到性能监控的各个方面。本文将介绍一些最常用的Java开发工具,包括jps、jmap、jstat、jcmd、jstack、…...
FPGA 使用 CLOCK_DEDICATED_ROUTE 约束
使用 CLOCK_DEDICATED_ROUTE 约束 CLOCK_DEDICATED_ROUTE 约束通常在从一个时钟区域中的时钟缓存驱动到另一个时钟区域中的 MMCM 或 PLL 时使 用。默认情况下, CLOCK_DEDICATED_ROUTE 约束设置为 TRUE ,并且缓存 /MMCM 或 PLL 对必须布局在相同…...
《解锁AI黑科技:数据分类聚类与可视化》
在当今数字化时代,数据如潮水般涌来,如何从海量数据中提取有价值的信息,成为了众多领域面临的关键挑战。人工智能(AI)技术的崛起,为解决这一难题提供了强大的工具。其中,能够实现数据分类与聚类…...
Java小白入门教程:Object
目录 一、定义 二、作用 三、使用场景 四、语法以及示例 1、创建Object类型的对象 2、使用 toString()方法 3、使用 equals()方法 4、使用 hashCode()方法 5、使用 getClass()方法 6、使用 clone()方法 7、使用 finalize()方法 一、定义 在Java中, object…...
记6(人工神经网络
目录 1、M-P神经元2、感知机3、Delta法则4、前馈型神经网络(Feedforward Neural Networks)5、鸢尾花数据集——单层前馈型神经网络:6、多层神经网络:增加隐含层7、实现异或运算(01、10为1,00、11为0)8、线性…...
stm32硬件实现与w25qxx通信
使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接 根据stm32f103c8t6引脚手册,采用B12-B15四个引脚与W25Q64连接,实现SPI通信。 W25Q64SCK(CLK)PB13MOSI(DI)PB15MISO(DO)PB14CS(…...
编程题-最接近的三数之和
题目: 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 解法一(排序双指针): 题目要求找…...
别再手动拼URL了!Spring Cloud项目里用OpenFeign调用其他服务,保姆级配置避坑指南
别再手动拼URL了!Spring Cloud项目里用OpenFeign调用其他服务,保姆级配置避坑指南 微服务架构下,服务间的HTTP调用是家常便饭。很多开发者还在用RestTemplate手动拼接URL、处理序列化,不仅代码冗长,还容易出错。想象一…...
CryptoJS不同加密模式对比:AES-CBC vs GCM在前端安全中的选择指南
AES加密模式深度解析:CBC与GCM在前端安全中的实战抉择 前端开发者在处理用户敏感数据时,AES加密已成为标配技术方案。但在具体实施过程中,加密模式的选择往往成为决策难点——是选择经典的CBC模式,还是拥抱更现代的GCM模式&#x…...
Pspice仿真新手避坑大全:为什么你的TL431仿真总报错?可能是模型库没加对
Pspice仿真新手避坑大全:为什么你的TL431仿真总报错? 刚接触Pspice的工程师们,是否经常遇到这样的场景:精心设计的TL431电路图明明检查了无数遍,点击仿真按钮后却弹出一堆令人困惑的错误提示?这就像拼好了乐…...
5分钟上手Vane容器化部署:从零搭建隐私优先的AI搜索引擎
5分钟上手Vane容器化部署:从零搭建隐私优先的AI搜索引擎 【免费下载链接】Vane Vane is an AI-powered answering engine. 项目地址: https://gitcode.com/GitHub_Trending/pe/Vane 想要在5分钟内搭建一个功能强大的AI搜索引擎吗?Vane是一个专注于…...
终极指南:如何让2012-2015年老款Mac安装最新macOS系统
终极指南:如何让2012-2015年老款Mac安装最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 您的2012-2015年老款Mac是否已被苹果官方抛…...
Ostrakon-VL零售AI降本方案:替代人工巡检,单店年省8万元
Ostrakon-VL零售AI降本方案:替代人工巡检,单店年省8万元 1. 零售巡检的痛点与AI解决方案 在传统零售运营中,门店巡检是一项耗时耗力的日常工作。店长或督导人员需要每天检查: 商品陈列是否整齐货架缺货情况价签是否正确店铺环境…...
【手把手教学】使用stitch 生成ui图,导入figma,再用codebuddy生成工程代码
目录 一.stich使用 1.1 关键词生成 1.2 生成ui图 1.3 导出figma编辑 二. codebuddy使用 编辑2.1打开figma 编辑 2.2 复制ui到设计面板 2.3生成工程代码 三. 结语 一.stich使用 stich官网地址 Google Stitch 是 Google Labs 推出的、基于 Gemini 大模型驱动的A…...
SSM+Vue大学生兼职网站源码+论文
代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...
你的企业还在靠人工处理重复工作?同行已经用 AI 释放人力了 | 2026企业数字化转型指南:基于实在Agent的端到端自动化解决方案
在2026年的数字化浪潮中,企业间的竞争已经从“资源规模”转向了“响应速度”。 当多数企业还在为报表合并、数据搬运、跨系统审核等重复性劳动耗费大量人力时, 领先的行业标杆已经开始通过智能体技术重构底层作业逻辑。 这种转变不仅是工具的更替&#x…...
STM32CubeMX实战指南:DMA驱动USART高效数据传输
1. DMA与USART协作的核心价值 第一次接触STM32的DMA功能时,我正被一个传感器数据采集项目折磨得焦头烂额。当时用传统的中断方式处理串口数据,CPU占用率直接飙到70%,整个系统卡得像老式拨号上网。直到尝试了DMAUSART组合,才真正体…...
