描述:
保證該類只有一個實例, 并提供全局范圍內對該實例的訪問接口.
單例模式又有懶漢模式和餓漢模式之分.
(1) 餓漢模式: 在系統啟動之初就創建完成, 并且和整個系統的生命周期一致.
(2) 懶漢模式: 第一次使用的時候創建, 之后一直存在.
這兩種方式是典型的空間和時間的考量, 餓漢模式是用空間換時間, 把單例的初始化放在了系統啟動時刻,但一直占用內存空間.
#pragma once
#include "MySingleton.generated.h"
UCLASS(BlueprintType, Blueprintable)
class UMySingleton : public UObject
{
GENERATED_BODY()
public:
UMySingleton(const FObjectInitializer& ObjectInitializer);
static UMySingleton* Instance();
private:
static UMySingleton* m_pSingleton;
};
#include "MySingleton.h"
#include "MyGameInstance.h"
UMySingleton* UMySingleton::m_pSingleton = nullptr;
UMySingleton::UMySingleton(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
}
UMySingleton* UMySingleton::Instance()
{
if (m_pSingleton==nullptr) {
m_pSingleton = NewObject<UMySingleton>(UMyGameInstance::Instance());
}
return m_pSingleton;
}