UE singleton 单例实现方法总结
Posted cartzhang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE singleton 单例实现方法总结相关的知识,希望对你有一定的参考价值。
本文章由cartzhang编写,转载请注明出处。 所有权利保留。
作者:cartzhang
单例使用目的:
一个类有且仅有一个实例。
防止有多个实例。
防止被变量在任意代码中被修改。
1. 函数内部静态变量
.h
/** Singleton access, platform specific, also calls PreInit() **/
static IFileManager& Get();
.cpp
IFileManager& IFileManager::Get()
static TUniquePtr<FFileManagerGeneric> AutoDestroySingleton;
if( !AutoDestroySingleton )
AutoDestroySingleton = MakeUnique<FFileManagerGeneric>();
return *AutoDestroySingleton;
2. 静态变量
.h
ENGINE_API static struct FStreamingManagerCollection& Get();
.cpp
// 静态变量
static FStreamingManagerCollection* StreamingManagerCollection = nullptr;
FStreamingManagerCollection& IStreamingManager::Get()
if (StreamingManagerCollection == nullptr)
StreamingManagerCollection = new FStreamingManagerCollection();
return *StreamingManagerCollection;
同样还有其他
FAssetEditorManager* FAssetEditorManager::Instance = NULL;
FAssetEditorManager& FAssetEditorManager::Get()
if (Instance == NULL)
Instance = new FAssetEditorManager();
return *Instance;
3.其他Instance 存放指针
常用的是GameInstance.
自定义的GameInstance,在头文件添加一个AAAManager的指针, AAAManager* TestAAManager。
在自定义的GameInstance.cpp中实现一下获取接口即可。
UAAManager* GetAAAManager()
if(TestAAManager == nullptr)
TestAAManager = NewObject<UAAManager>(this);
return TestAAManager;
在AAAManager中实现一个Get()静态接口函数,就是单例的入口。
UAAManager* UAAManager::Get(UObject* ContextObject)
TestGameInstance* GameInstance = TestGameInstance::Get(ContextObject);
if (GameInstacne)
return GameInstance->GetAAAManager();
return nullptr;
GameInstance 是从GetWorld()->GetGameInstance().
所以是跟当前Level的world唯一绑定的。
若有问题,请多多指教!
以上是关于UE singleton 单例实现方法总结的主要内容,如果未能解决你的问题,请参考以下文章
Java面向对象--单例(Singleton)设计模式和main方法