首页 > 其他分享 >UE 共享指针 共享引用

UE 共享指针 共享引用

时间:2024-03-09 18:11:18浏览次数:22  
标签:FTestA SharedPtr LOG TEXT LogTemp UE 共享 指针

class FTestA {
public:
	FTestA() {
		UE_LOG(LogTemp, Warning, TEXT("FTestA 构造"));
	}
	void TestFun() {
		UE_LOG(LogTemp, Warning, TEXT("FTestA TestFun方法"));
	}
	~FTestA() {
		UE_LOG(LogTemp, Warning, TEXT("FTestA 析构"));
	}
};

class FTestAChild : public FTestA {
public:
	FTestAChild() {
		UE_LOG(LogTemp, Warning, TEXT("FTestAChild 构造"));
	}
	void TestFunChild() {
		UE_LOG(LogTemp, Warning, TEXT("FTestAChild TestFunChild方法"));
	}
	~FTestAChild() {
		UE_LOG(LogTemp, Warning, TEXT("FTestAChild 析构"));
	}
};

UFUNCTION(BlueprintCallable)
void MyTest();

void AMyIntelligentPointer::MyTest()
{
	//共享指针
	{
		TSharedPtr<FTestA, ESPMode::NotThreadSafe> SharedPtr = MakeShareable(new FTestA);	//创建时SharedReferenceCount=1
		if (SharedPtr.IsValid()) {
			SharedPtr->TestFun();

			int32 SharedReferenceCount = SharedPtr.GetSharedReferenceCount();
			UE_LOG(LogTemp, Warning, TEXT("SharedReferenceCount : %d"), SharedReferenceCount);

			//手动释放
			//SharedPtr = nullptr;
			UE_LOG(LogTemp, Warning, TEXT("SharedPtr.IsUnique : %d"), SharedPtr.IsUnique());
			SharedPtr.Reset();
		}
	}

	//共享引用
	{
		//TSharedRef<FTestA, ESPMode::NotThreadSafe> SharedRef = MakeShareable(new FTestA()); //将共享指针隐式转换成引用
		TSharedRef<FTestA, ESPMode::NotThreadSafe> SharedRef(new FTestA);
		SharedRef->TestFun();
		int32 SharedReferenceCount = SharedRef.GetSharedReferenceCount();
		UE_LOG(LogTemp, Warning, TEXT("SharedReferenceCount : %d"), SharedReferenceCount);
		UE_LOG(LogTemp, Warning, TEXT("SharedRef.IsUnique : %d"), SharedRef.IsUnique());
	}

	//相互转化
	{
		//共享引用转化成共享指针
		UE_LOG(LogTemp, Warning, TEXT("共享引用转化成共享指针"));
		TSharedRef<FTestA, ESPMode::NotThreadSafe> SharedRef(new FTestA);
		TSharedPtr<FTestA, ESPMode::NotThreadSafe> SharedPtr = SharedRef;
	}
	{
		//共享指针转化成共享引用
		UE_LOG(LogTemp, Warning, TEXT("共享指针转化成共享引用"));
		TSharedPtr<FTestA, ESPMode::NotThreadSafe> SharedPtr = MakeShareable(new FTestA);
		TSharedRef<FTestA, ESPMode::NotThreadSafe> SharedRef = SharedPtr.ToSharedRef();
	}

	//继承关系转化
	{
		TSharedPtr<FTestA, ESPMode::NotThreadSafe> SharedPtr = MakeShareable(new FTestAChild);
		if(SharedPtr.IsValid()) {
			SharedPtr->TestFun();
			TSharedPtr<FTestAChild, ESPMode::NotThreadSafe> SharedPtr2 = StaticCastSharedPtr<FTestAChild>(SharedPtr);	//ConstCastSharedPtr:常量共享指针转化
			if (SharedPtr2.IsValid()) {
				SharedPtr2->TestFunChild();
			}
		}
	}
}

  

标签:FTestA,SharedPtr,LOG,TEXT,LogTemp,UE,共享,指针
From: https://www.cnblogs.com/wanhui/p/18063089

相关文章

  • Vue — 生命周期
    一、Vue的生命周期和生命周期的四个阶段1、生命周期一个Vue实例从创建到销毁的过程。2.生命周期的四个阶段(1)创建:做一些初始化操作,Vue将普通数据转化为响应式数据;(2)挂载:渲染模板,结合对应的数据渲染到视图,看到页面的渲染完成则可以认为已经完成了(1)(2)两个阶段;(3)更新:数据修改,视图......
  • CF1264D2 Beautiful Bracket Sequence (hard version) 题解
    括号深度的本质,其实就是删除若干个字符以后使得左边一半全是(,右边一半全是),最终(的个数的最大值。那么就一定存在一个位置使得在这个位置以及之前的字符中(的个数等于这个字符后)的个数。考虑枚举这个位置,记它左边的(的个数为\(a\)、?的个数为\(x\),右边的)的个数......
  • jQuery中使用箭头函数,调用$(this)失效?
    1.问题在jQuery中使用箭头函数,最后调用$(this)发现无效?$(function(){//鼠标经过$('.nav>li').mouseover(()=>{//$(this)jQuery当前元素this不要加引号//show()显示元素hide()隐藏元素$(this).children('ul').show();}......
  • Vue — 监听器(watch)使用
    在Vue.js中,watch选项用于监视数据的变化,并在数据变化时执行相应的操作。watch可以监视一个或多个数据的变化,当被监视的数据发生变化时,可以触发预定义的回调函数。一、简单写法<textareaname=""id=""cols="30"rows="10"v-model="word"></textarea>watch:{......
  • Vue — 计算属性(computed)详解
    Vue.js中的计算属性是基于它的响应式系统来实现的,它可以根据Vue实例的数据状态来动态计算出新的属性值。在Vue组件中,计算属性常用于对数据进行处理和转换,以及动态生成一些需要的数据。一、使用方式1.定义计算属性: 在Vue组件中,通过在 computed 对象中定义计算属性名称及......
  • 好细的Vue安装与配置
    一、下载和安装Vue官网下载地址Download|Node.js 选择适合自己的版本,推荐LTS,长久稳定版本。 我这里选择的是WindowsInstaller(.msi)64-bit下载好后,双击下载的安装包。 点next  勾选Iaccept............,点next   这里建议更改为自己想要的的安装目录,......
  • 【vue3】学习对store中数据的使用
    src/store/modules/nav.jsimport{defineStore}from'pinia';import{handleTree}from'@/utils/ruoyi'import{list}from"@/api/nav/node";conststore=defineStore( 'nav', { state:()=>({ nodeList:[]......
  • 【前端Vue】社交信息头条项目完整笔记第1篇:一、项目初始化【附代码文档】
    社交媒体-信息头条项目完整开发笔记完整教程(附代码资料)主要内容讲述:一、项目初始化使用VueCLI创建项目,加入Git版本管理,调整初始目录结构,导入图标素材。二、登录注册准备,实现基本登录功能,登录状态提示,表单验证。三、个人中心,四、首页—文章列表TabBar处理,页面布局,处......
  • vue面试1
    生命周期函数(父子)顺序父beforeCreate =>.父created==>.父beforeMount==>子beforeCreate==> 子created==> 子beforeMount==> 子mounted==>父mounted更新顺序父beforeUpdate==>子beforeUpdate==>子updated==>父updated卸载顺序父beforeDestory/子before......
  • Vue3 组合函数拖拽
    代码exportfunctionuseDragMouse(dom,container){letcontainerX=0;letcontainerY=0;letstartX=0;letstartY=0;functiondragPage(e){container.value.style.left=e.pageX-startX+containerX+"px";container.valu......