描述:
保证该类只有一个实例, 并提供全局范围内对该实例的访问接口.
单例模式又有懒汉模式和饿汉模式之分.
(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;
}