当前位置: 首页 > news >正文

大连建设培训网上首页的seo关键词优化

大连建设培训网,上首页的seo关键词优化,wordpress提示插件安装插件,平面设计网站有哪些比较好目录 概念 声明和初始化 转换为共享指针 打破循环引用 弱指针使用警告 概念 在UE C 中,弱指针(TWeakPtr )也是一种智能指针类型,主要用于解决循环引用问题以及在不需要强引用保证对象始终有效的场景下,提供一种可…

目录

概念

声明和初始化

转换为共享指针

打破循环引用

弱指针使用警告


概念

        在UE C++ 中,弱指针(TWeakPtr )也是一种智能指针类型,主要用于解决循环引用问题以及在不需要强引用保证对象始终有效的场景下,提供一种可以获取对象访问权限的方式。与共享指针(TSharedPtr )和共享引用(TSharedRef )不同,弱指针不会增加其所指向对象的引用计数,这意味着它不会对对象的生命周期产生维持作用,即不会阻止对象被销毁。

        例如,在一些复杂的对象关系结构中,多个对象之间可能相互引用,如果都使用强引用(如 TSharedPtr 或 TSharedRef ),很容易形成循环引用,导致对象的引用计数永远无法降为 0,从而造成内存泄漏。而弱指针可以在这种情况下参与对象的引用关系构建,避免出现循环引用问题,同时又能在对象仍然存在时,有机会获取到对象的有效访问权限。

        在访问弱指针引用的对象前,应使用 Pin 函数生成共享指针。此操作确保使用该对象时其将继续存在。如只需要确定弱指针是否引用对象,可将其与 nullptr 比较,或在之上调用 IsValid

声明和初始化

        在如下代码中,体现了弱指针不维持对象生命周期的特点,以及通过 Pin 函数检查对象是否还能获取有效访问权限的用法。

        在第16行代码中,使用 MakeShared<FMyStruct>() 创建了一个 FMyStruct 类型的对象,并通过 TSharedRef 来管理这个对象,使得 ObjectOwnerRef 指向新创建的对象。此时,该对象的引用计数被初始化为 1。

        第17行代码通过将 ObjectOwnerRef 作为参数传递给 TWeakPtr 的构造函数,创建了一个弱指针 ObjectObserver,使其指向与 ObjectOwnerRef 相同的 FMyStruct 对象。需要注意的是,这个操作并不会增加对象的引用计数,对象的生命周期仍然仅由 ObjectOwnerRef (以及后续可能出现的其他指向该对象的共享指针或共享引用)来维持,ObjectObserver 只是建立了一个对该对象的弱引用关系,用于后续在不影响对象生命周期的情况下尝试获取对对象的访问权限。

        第18行代码创建了一个 TSharedPtr 类型的共享指针 ObjectOwnerPtr,并通过赋值操作让它也指向 ObjectOwnerRef 所指向的 FMyStruct 对象。此时,对象的引用计数会从 1(仅由 ObjectOwnerRef 维持时)变为 2。

        第19行代码调用 ObjectOwnerPtr 的 Reset 函数,这会使得 ObjectOwnerPtr 释放对其所指向对象的强引用,对象的引用计数会相应地减 1。在执行完这行代码后,对象的引用计数变回 1,仅由 ObjectOwnerRef 来维持其生命周期。

        第20~23行代码使用了 弱指针ObjectObserver 的 Pin 函数来尝试获取一个指向原对象的临时共享指针,以检查对象是否仍然可以被访问。Pin 函数会在对象仍然存在(即对应的引用计数大于 0 )的情况下,返回一个指向该对象的临时 TSharedPtr

转换为共享指针

  Pin 函数将创建指向弱指针对象的共享指针。只要共享指针在范围内且引用对象,则该对象将持续有效。

        如下代码主要展示了如何将一个由共享引用(TSharedRef )管理的对象转换为可通过弱指针(TWeakPtr )来间接访问的形式,并且演示了通过弱指针的 Pin 操作获取临时共享指针(TSharedPtr ),进而访问对象成员函数 PrintAA 的过程,整体体现了弱指针在不影响对象生命周期管理的情况下,实现对对象的安全访问机制。

打破循环引用

出现循环引用的示例:

首先在“FMyStruct”结构体中定义一个共享指针 HoldPtr,并初始化为 nullptr

然后创建两个 FMyStruct 类型的对象,并通过它们各自包含的 TSharedPtr<FMyStruct> 类型成员变量 HoldPtr 互相指向对方,形成了一个循环引用的结构,如下所示。

此时调用“LoopPtr”会发现,并没有输出析构的日志信息,说明产生了循环引用现象,导致对象的引用计数永远无法降为 0。

为了打破循环引用,我们可以使用弱指针来代替共享指针

编译后运行 结果如下,可以看到对象可以正常析构了:

弱指针使用警告

        如不想保证数据对象会持续存在时,弱指针将非常有用,但该属性可能会变得异常危险。在以下情况中请谨慎使用弱指针:

  • **在Set或Map中用作键。弱指针可能会在未通知容器的情况下随时无效,因此共享指针或共享引用更适用于充当键。可安全地将弱指针用作数值。

  • 虽然弱指针提供 IsValid 函数,但是检查 IsValid 无法保证对象在任何时间长度内均可持续有效。线程安全共享指针可能会因另一线程上的活动而随时无效,因此使用线程安全共享指针应尤其注意。Pin 返回的共享指针将使对象在代码将其清除或其超出范围前保持活跃状态,因此 Pin 函数是用于检查的首选方法,此类检查会导致取消引用或访问存储对象。

官方文档地址:

https://dev.epicgames.com/documentation/zh-cn/unreal-engine/shared-references-in-unreal-engine?application_version=5.3

http://www.hkea.cn/news/355676/

相关文章:

  • 网站建设方案论文1500社会新闻最新消息
  • 网站组建 需求分析市场监督管理局职责
  • 云课堂哪个网站做的好厦门关键词优化seo
  • 中企动力沈阳分公司seo免费诊断电话
  • 网站vps被黑湖人最新排名最新排名
  • 如何夸奖客户网站做的好seo课程心得体会
  • 有哪些做电子商务的网站时空seo助手
  • 临沂百度网站电脑培训机构哪个好
  • 无锡专业做网站的公司怎样把自己的产品放到网上销售
  • 大学网站建设管理办法推广技巧
  • 长春做网站公司seo关键词排名优化软件怎么选
  • 网站开发未按合同约定工期完工seo关键词排名怎么提升
  • 创可贴app海报制作网站百度seo优化方法
  • 龙岗品牌网站建设2024年新闻摘抄
  • 南阳住房和城乡建设厅网站招聘网站排名
  • 如何做网站活动封面建站的公司
  • 温州网站建设培训营销推广方案包括哪些内容
  • 厦门 建网站商业软文案例
  • wordpress读者墙站长之家seo工具包
  • 网站建设哪家好灵活苏州久远网络北京搜索引擎关键词优化
  • 网站优化怎么做 有什么技巧东莞seo建站
  • 什么网站可以做游戏机疫情最新数据消息
  • 企业网站开发报价单巩义网络推广
  • 网站开发技术交流群免费域名申请网站
  • 手机网站一键分享怎么知道自己的域名
  • 做网站 做好把我踢开北京网站搭建哪家好
  • 网站如何做引流刷外链网站
  • wordpress 站点地址关注公众号一单一结兼职
  • 合肥网站建设第一品牌个人seo外包
  • 省心的免费建站服务热线四川seo关键词工具