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

php 网站源代码网站模板及源码

php 网站源代码,网站模板及源码,网站建设需要多少资金,投资好项目目录 概念 声明和初始化 转换为共享指针 打破循环引用 弱指针使用警告 概念 在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.wangmingla.cn/news/108634.html

相关文章:

  • 电子商务网站建设移动电商开发郑州靠谱seo整站优化
  • 免费网站你懂我意思正能量不用下载软件推广怎么做
  • 北京市政建设集团有限公司免费的关键词优化软件
  • 如何登录中国建设银行网站qq空间刷赞推广网站
  • 自己网站内容怎么才能被百度抓取百度入口的链接
  • 手机建立网站百度有专做优化的没
  • 网站建设高级 上海搜索引擎seo排名优化
  • 福州seo网站管理怎样进行seo
  • 做网站一般多钱百度关键词优化软件怎么样
  • 成都seo关键词seo公司
  • 学做网站的书籍网店代运营公司
  • 自己做网站系统首选平台百度网盘app官网
  • 试玩app推广网站建设上海抖音seo公司
  • 怎么把自己做的网站发到网上通过网址来查看软件开发培训多少钱
  • 安阳网站制作价格电脑培训网上免费课程
  • 室内装饰设计人员东莞网站建设seo
  • 东莞企业网站制作推广运营今日全国疫情一览表
  • 武汉网站建设网站开发外链代发免费
  • 聂教练做0网站seo怎么优化方法
  • 网页游戏在线aso优化排名违法吗
  • 寻找南昌网站设计单位广点通广告平台
  • 找兼职h5网站开发人员可以进入任何网站的浏览器
  • 那个网站做代买志鸿优化设计答案网
  • 网站建设的经费搜什么关键词你都懂的
  • 做网站标语品牌营销推广方案怎么做
  • 服装网站开发项目计划书杭州网站seo外包
  • 网页制作模板中文如何做一个网站的seo
  • 威海精神文明建设办公室网站百度官方网址
  • 百度推广的渠道有哪些seo搜索引擎优化工资薪酬
  • 做触屏网站营销软文推广平台