2.5 KiB
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() 返回唯一的实例对象。 |
使用示例
- 示例代码(伪代码)
#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;
}
- 测试用例编译运行方法
-
测试用例代码参见base/test/unittest/common/utils_singleton_test.cpp
-
使用开发者自测试框架,使用方法参见:开发自测试执行框架-测试用例执行
-
使用以下具体命令以运行
singleton.h
对应测试用例
run -t UT -tp utils -ts UtilsSingletonTest
常见问题
调用DestroyInstance()
方法后,GetInstance()
方法将创建新的对象, 旧对象若存在外部的std::shared_ptr
引用,则需要开发者自行释放以保证单例。