设计模式——单例模式(C++11实现)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式——单例模式(C++11实现),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1441字,纯文字阅读大概需要3分钟。
内容图文
![设计模式——单例模式(C++11实现)](/upload/InfoBanner/zyjiaocheng/604/4bf1f41caf4748a3a1c1033db0557ca0.jpg)
C++11实现泛型单例模式,支持任意参数类的对象创建。采用了C++11的可变参数模板和完美转发技术
#include <iostream>
#include <string>
#include <stdexcept>
using namespace std;
//单例类,包含任意参数的类实例。
template <typename T>
class Singleton
{
public:
template <typename... Args> //C++11可变参数模板
static T * Instance(Args&&... args)
{
if(m_pInstance==nullptr)
{
//使用完美转发,避免不必要的内存复制
m_pInstance=new T(std::forward<Args>(args)...);
}
return m_pInstance;
}
static T* GetInstance()
{
if(m_pInstance==nullptr)
{
throw logic_error("the instance is not init,please initialize the instance first");
}
return m_pInstance;
}
static void DestroyInstance()
{
delete m_pInstance;
m_pInstance=nullptr;
}
private:
Singleton(void);
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
virtual ~Singleton(void);
private:
static T* m_pInstance; //类实例
};
template <typename T>
T* Singleton<T>::m_pInstance=nullptr;
struct A
{
A(const string &)
{
cout<<"lvalue"<<endl;
}
A(const string &&x)
{
cout<<"rvalue"<<endl;
}
};
struct B
{
B(const string &)
{
cout<<"lvalue"<<endl;
}
B(const string &&x)
{
cout<<"rvalue"<<endl;
}
};
struct C
{
C(int x,double y)
{
cout<<"C: "<<x<<" "<<y<<endl;
}
void fun()
{
cout<<"test"<<endl;
}
};
int main()
{
cout<<"test begin"<<endl;
string str="bb";
Singleton<A>::Instance(str);
Singleton<B>::Instance(move(str));
Singleton<C>::Instance(1,3.14);
Singleton<C>::GetInstance()->fun();
Singleton<A>::DestroyInstance();
Singleton<C>::DestroyInstance();
return 0;
}
内容总结
以上是互联网集市为您收集整理的设计模式——单例模式(C++11实现)全部内容,希望文章能够帮你解决设计模式——单例模式(C++11实现)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。