智能指针销毁问题 - Unreal Engine 4.27

Smart Pointers Destruction Issue - Unreal Engine 4.27

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

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

错误:

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

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

APointersManager.h(指针赋值): TSharedPtr SharedPointerObjectPtr = nullptr;

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

(指针上次参考重置) SharedPointerObjectPtr.Reset();

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

似乎发生的问题是您不能将 TSharePtr(共享指针)用于 UObject 类,例如 AActor 类.

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

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