Files
phs_v1.0.1.0/commonlibrary/c_utils/docs/zh-cn/c-utils-guide-singleton.md
2024-09-27 19:16:49 +08:00

2.5 KiB

单例模式

概述

简介

根据不同的需求提供了三种不同的单例模式。class DelayedSingleton 是一个线程安全、内存安全的懒汉式单例(用到了智能指针和锁)。class DelayedRefSingleton 是一个函数线程安全的懒汉式单例(用到了普通指针和锁)。class Singleton 是一个饿汉式单例(没有用指针和锁)。

涉及功能

class DelayedSingleton

接口说明

返回类型 名称
void DestroyInstance()
释放智能指针托管对象的管理权。
std::shared_ptr< T > GetInstance()
创建唯一的实例对象并返回。

class DelayedRefSingleton

接口说明

返回类型 名称
T& GetInstance()
创建唯一的实例对象并返回。

class Singleton

接口说明

返回类型 名称
T& GetInstance()
返回唯一的实例对象。

使用示例

  1. 示例代码(伪代码)
#include <iostream>
#include "../include/singleton.h"

using namespace OHOS;
using namespace std;

class DemoDelayedSingleton
{
    DECLARE_DELAYED_SINGLETON(DemoDelayedSingleton);
};

DemoDelayedSingleton :: DemoDelayedSingleton() {}
DemoDelayedSingleton :: ~DemoDelayedSingleton() {}

int main()
{
    shared_ptr<DemoDelayedSingleton> ds1 = DelayedSingleton<DemoDelayedSingleton>::GetInstance();
    shared_ptr<DemoDelayedSingleton> ds2 = DelayedSingleton<DemoDelayedSingleton>::GetInstance();

    if (ds1 == ds2) {
        cout << "Delayed singleton instances construct success!" << endl;
    }


    ds1.reset();
    ds2.reset();
    DelayedSingleton<DemoDelayedSingleton>::DestroyInstance();
    cout << "Delayed singleton instances destroy success!" << endl;

}
  1. 测试用例编译运行方法
  • 测试用例代码参见base/test/unittest/common/utils_singleton_test.cpp

  • 使用开发者自测试框架,使用方法参见:开发自测试执行框架-测试用例执行

  • 使用以下具体命令以运行singleton.h对应测试用例

run -t UT -tp utils -ts UtilsSingletonTest

常见问题

调用DestroyInstance()方法后,GetInstance()方法将创建新的对象, 旧对象若存在外部的std::shared_ptr引用,则需要开发者自行释放以保证单例。