UnrealEngine4 - 关于UObject被自动GC垃圾回收的巨坑

1 出现的问题
在一个插件中新建了一个静态的继承于UObject的对象

static UMyObject* m_Object = nullptr;
1
然后在插件的蓝图函数中对其进行了初始化:

m_Object = NewObject<UMyObject>();
1
过了一段时间之后发现这个对象被析构,导致野指针,造成程序崩溃!

这尼玛可是静态对象指针!

2 UE4对UObject的自动析构机制
UE4对UObject对象不像C++,UE4会在UObject对象没有任何引用时候自动回收该对象。(太智能了,智能的让人头皮发麻)

而C++对象如果是动态创建的会一直存在于程序的声明周期中,如果不主动析构,就会造成内存泄漏。

从明面上看UE4这种防止内存泄漏的机制很完美,但是对于刚刚接触UE4的新手来说,满以为UE4采用的C++,但是这个机制确实如此的不同,容易造成野指针的问题。

3 保持UObject对象不被自动析构
如果在普通C++类中有一个UObject* A变量,那么在创建完该变量之后,最好使用AddToRoot,这样就不会被UE4自动GC,然后在析构函数中,使用RemoveFromRoot即可自动让UE4GC,防止内存泄漏。
UMyObject* m_Object = NewObject<UMyObject>();
m_Object->AddToRoot();
1
2
然后在C++类析构函数中添加:

m_Object->RemoveFromRoot();
1
如果是在继承UObject类中有一个UObject* A变量,那么即可使用UPROPERTY宏标记一下这个变量,则此变量就不会被UE4自动GC,在该类被销毁的时候,变量A会被设置为null,在之后会被UE4自动GC。
————————————————
版权声明:本文为CSDN博主「HW140701」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HW140701/article/details/110149812

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转载保存】Java+Selenium使用

环境搭建&#xff1a;https://blog.csdn.net/u011541946/article/details/72898514 环境搭建问题解决&#xff1a;https://blog.csdn.net/u010366748/article/details/72872190 package server;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By; import o…

UE4加载osgb倾斜摄影数据

在UE4引擎中动态加载调度osgb倾斜摄影数据&#xff0c;利用多线程动态加载瓦片数据&#xff0c;可以顺畅加载海量的瓦片数据。最大可加载200G以上数量级。 Unity3D加载osgb倾斜摄影数据:Unity3d(UE4)动态加载osgb倾斜摄影数据_Answer-3的博客-CSDN博客_unity加载osgb qq:1749…

相对路径转成绝对路径

public static String getAbsoluteURL(String baseURI, String relativePath) {String abURL null;try {URI base new URI(baseURI);// 基本网页URIURI abs base.resolve(relativePath);// 解析于上述网页的相对URL&#xff0c;得到绝对URIURL absURL abs.toURL();// 转成U…

Unity/UE读取OPC UA和OPC DA数据(UE4)

Unity/UE4通过OPC UA和OPC DA协议读取PLC数据&#xff0c;通过采集服务将数据采集到数据库中&#xff0c;Unity3d和UE4再从数据库中读取数据进行展示&#xff0c;用于三维数字孪生系统接入自动化系统的硬件数据。支持WinCC,组态王&#xff0c;Kepware等组态软件的数据接入。 W…

【转载保存】Selenium WebDriver API常用方法

详细&#xff1a;https://blog.csdn.net/yjlch1016/article/details/78115813#commentBox 中文API&#xff1a;https://blog.csdn.net/m0_37831339/article/details/81206427

Unity3d(UE4)动态加载osgb倾斜摄影数据

在Unity3D平台动态加载调度倾斜摄影数据&#xff0c;利用多线程动态加载瓦片数据&#xff0c;可以顺畅加载海量的瓦片数据。目前测试可流畅加载200G左右数据&#xff0c;支持加载本地数据&#xff0c;数据可不放在Unity工程内&#xff0c;也可以将数据放置在服务器上实现网络加…

java多线程爬虫框架crawler4j的使用

一开始找jar包找了好久都没找到&#xff0c;后来花了6个积分把所有的依赖包找到了&#xff0c;现在放在百度云供大家免费下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/12MTMy4d4e6hZsmWAdXbUMQ 提取码&#xff1a;433g 注意这些依赖包是3.5版本的不是最新版本。 …

昂贵的聘礼 poj 1062 dijsk

昂贵的聘礼Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 46539 Accepted: 13819 Description 年轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了&#xff0c;于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿不出…

Berkeley DB作用

Berkeley DB是一个嵌入式数据库&#xff0c;这里的嵌入式和嵌入式系统无关&#xff0c;嵌入式数据库的意思是不需要通过JDBC访问数据库&#xff0c;也不单独启动进程来管理数据&#xff0c;Berkeley DB运行在网络爬虫所在的进程空间。 Berkeley DB中的一个数据库只能存储键值对…

【保存】java学习全套视频下载地址

http://www.java1234.com/javaxuexiluxiantu.html

java网络爬虫视频教程下载

http://www.java1234.com/javapachongxuexiluxiantu.html

WebMagic学习总结

教科书式文档&#xff1a;http://webmagic.io/docs/zh/posts/ch4-basic-page-processor/ 概念介绍&#xff1a;http://448230305.iteye.com/blog/2145296 入门教程&#xff1a;https://blog.csdn.net/zhengmengjia/article/details/42028283#commentBox 详细教程&#xff1a; h…

【优秀文章保存】webcollector抽取新闻正文

jar包下载&#xff1a;https://github.com/CrawlScript/WebCollector/blob/master/webcollector-2.73-alpha-bin.zip 使用介绍(超详细)&#xff1a;https://blog.csdn.net/wangmx1993328/article/details/81667284?utm_sourceblogxgwz0#commentBox 网页抽取算法介绍&#xff1…

Problem E: 校庆

Problem E: 校庆 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1520 Solved: 574Description 2017年10月28日是zstu的120周年校庆&#xff0c;撒花&#xff0c;撒花。为此KI决定设计一个程序&#xff0c;来庆祝我们的校庆&#xff1a; 给出某一天的日期year-month-date…

【转载保存】WebCollector 2.x 入门教程

https://blog.csdn.net/ajaxhu/article/details/38406687

【转载】Jsoup设置代理ip访问

转载地址&#xff1a;https://blog.csdn.net/qq_36980713/article/details/80913248 import java.io.IOException; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.jsoup.Jsoup; import org.jsoup.nod…

【转载保存】webCollector使用教程

github&#xff1a;https://github.com/CrawlScript/WebCollector gitee(里面新闻的例子不错): https://gitee.com/education

【转载保存】java操作HDFS

http://www.cnblogs.com/langgj/p/6595756.html

牛吃草 数论

4243: 牛吃草 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 306 Solved: 87Description 农夫有一个长满草的&#xff08;x0, y0&#xff09;为圆心&#xff0c;r为半径的圆形牛栏&#xff0c;他要将一头牛栓在坐标&#xff08;x1, y1&#xff09;栏桩上&#xff0c;但只让…