【问题标题】:Smart Pointers Destruction Issue - Unreal Engine 4.27智能指针破坏问题 - Unreal Engine 4.27
【发布时间】:2021-10-10 00:20:48
【问题描述】:

我已经困惑了几天了,我正在切换到使用智能指针而不是原始指针,但是每次我释放最后一个 TSharePtr 以销毁它所持有的 Actor 时,我当 UE4 试图销毁对象时遇到断言异常...

请注意,我正在销毁的对象也是从蓝图创建的。

错误:

断言失败:GetFName() == NAME_None [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/UObject/UObjectBase.cpp] [行:130]

代码: APointerReferencedActor.h(共享指针对象类): class SMARTPOINTERSDEMO_API APointerReferencedActor : public AActor

APointersManager.h(指针分配): TSharedPtr SharedPointerObjectPtr = nullptr;

APointersManager.cpp: (指针赋值) SharedPointerObjectPtr = TSharedPtr(Cast(GetWorld()->SpawnActor(SharedPointerClass)));

(指针上次引用重置) SharedPointerObjectPtr.Reset();

回购链接: https://github.com/Bisher-d790/UE4-SmartPointersDemo

【问题讨论】:

标签: c++ unreal-engine4


【解决方案1】:

似乎正在发生的问题是您不能将 TSharePtr(共享指针)与 UObject 类(例如 AActor 类)一起使用。

原因是这些是引擎垃圾收集的,不能被智能指针垃圾收集,因为引擎GC系统会在最后一个指针重置时阻止对象的删除。据我了解。

来源: https://dawnarc.com/2018/07/ue4-tsharedptr-tweakobjectptr-and-tuniqueptr/ https://answers.unrealengine.com/questions/23497/view.html

【讨论】:

    猜你喜欢
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多