C++11写的一个简洁的单例类型模版包装器

单例是经常用到的设计模式实践,对于全局使用的唯一资源事例一般都把类型封装成单例,但是有时候觉得对于每个class都要改造一遍单例会觉得比较繁琐,尤其是在预先不知道哪些类型会使用为单例的时候。

为了应对这种情况,又一个讨巧的办法是写一个单例模版类包装器,当遇到某些class类型要当作单例使用的时候就用该模版包装一下。

模版类
singleton.hpp

#pragma once

// support C++11 and above version
template<typename T>
class Singleton
{
public:
	static T* getInstance()
	{
		static T t;
		return &t;
	}

private:
	Singleton();
	Singleton(const Singleton&);
	Singleton& operator=(const Singleton&);
};

使用
main.cpp

#include <iostream>
#include "singleton.hpp"

// gurantee the class instance not created in other place but for singleton
class MyObject
{
public:
	MyObject()
	{
		std::cout << "MyObject constructed" << std::endl;
	}

	void func()
	{
		std::cout << "current this pointer addr: " << this << std::endl;
	}
};

int main(int argc, char** argv)
{
    Singleton<MyObject>::getInstance()->func();
    Singleton<MyObject>::getInstance()->func();
    Singleton<MyObject>::getInstance()->func();

    return 0;
}

运行结果

MyObject constructed
current this pointer addr: 0x102c50120
current this pointer addr: 0x102c50120
current this pointer addr: 0x102c50120

可以看出,能够保证这个类型只被实例化了一次
当然,需要注意的是,写代码自己要注意对于用单例模版封装的类型就不要再手动在其他地方创建实例,上面的写法比较简陋,这方面需要自己去把握规范

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页