智能指针销毁问题 - 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
我已经困惑了几天了,我正在切换到使用智能指针而不是原始指针,但是每次我释放最后一个 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