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

php 网站源代码百度收录的网站多久更新一次

php 网站源代码,百度收录的网站多久更新一次,百度搜索指数,福州seo管理目录 概念 声明和初始化 转换为共享指针 打破循环引用 弱指针使用警告 概念 在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.shuangfujiaoyu.com/news/55933.html

相关文章:

  • 有什么网站可以做免费推广企业宣传片
  • 东莞疫情最新情况最新消息网站关键词优化推广哪家快
  • 软件测试项目去哪里找seo策略分析
  • 淘宝联盟怎么做自己的网站地推接单正规平台
  • 计算机专业做网站的总结抖音seo源码搭建
  • 国外做网站推广班级优化大师使用心得
  • 合同范本的网站西宁网站seo
  • 深圳Wordpress网站下列关于seo优化说法不正确的是
  • 网站开发语言 asp可靠的网站优化
  • 洛阳建设部官方网站口碑营销的优势有哪些
  • 朝阳区手机网站建设服务我的百度购物订单
  • 可以做外链的网站网络营销的十种方法
  • 自己做的网站某个网页打开很慢高清免费观看电视网站
  • 优惠网站代理怎么做中国万网登录入口
  • 佛山h5网站公司网络营销的手段包括
  • 抖音评论点赞自助网站百度网站排名规则
  • 中山网站建设企业广告推广怎么找客户
  • 哪个网站做的效果图好百度人工客服在线咨询电话
  • 培训做网站搜索广告和信息流广告区别
  • 手机版网站模板如何做品牌运营与推广
  • 网站建设与制作的毕业论文百度seo流量
  • 旅游网站推荐免费网站制作成品
  • 网站商城支付接口营销策划书模板范文
  • 做网站第一步要学什么找精准客户的app
  • 建站公司 万维科技搜索引擎广告优化
  • 北京网站建设公司分享网站改版注意事项优化新十条
  • 展会搭建设计案例网站赣州seo公司
  • 忻州市建设厅网站首页网络营销中的seo是指
  • 培训网站建设方案书网络营销的概念及特点
  • 甘肃省建设厅执业资格注册网站手机百度2020