只能生成一个对象的类(经典设计模式之一)
来源:互联网 发布:淘宝评价好评改差评 编辑:程序博客网 时间:2024/05/22 07:07
#include <iostream>
// singleton
class A
{
public:
static A* GetInstance(void)
{
if ( m_pInstance == NULL )
m_pInstance = new A();
return m_pInstance;
}
// test function
void display()
{
std::cout << "Hello, world" << std::endl;
}
private:
// default constructor
A() {
std::cout << "construction\n";
}
private:
static A* m_pInstance;
};
// init static m_pInstance
A* A::m_pInstance = NULL;
int main()
{
A* ptr1 = A::GetInstance();
A* ptr2 = A::GetInstance();
ptr1->display();
ptr2->display();
//A* ptr3 = new A; // forbidden
//A obj; // forbidden
return 0;
}
//////////////////////////////////////////////////////////////
//示例而已
【xxyyboy】:
定义为 static ini 类的函数
用1static 类指针来直接返回已经初始化过的实体
楼上的都是正确的例子。
【Cocoky】:
singleton
【zwlzwlzwl】:
Class Singleton{
static Singleton s;
int i;
Singleton(int x):i(x) { }
Singleton& operator=(Singleton&);
Singleton(const Singleton&);
public:
static Singleton& instance() { return s;}
int getvalue() { return i;}
void setvalue() { i = x;}
//关键是在类中声明一个类的实例,并将构造函数、拷贝构造函数、赋值构造函数声明为私有的,这样就能防止调用默认构造函数声明类的实例,只能用类的函数instance为一个新地向赋值,这样就保证了一个对象只实例一次。
int main()
{
Singleton& s = Singleton::instance();
cout<<s.getvalue()<<endl;
Singleton& s2 = Singleton::instance();
cout<<s2.getvalue()<<endl;
}
}
// singleton
class A
{
public:
static A* GetInstance(void)
{
if ( m_pInstance == NULL )
m_pInstance = new A();
return m_pInstance;
}
// test function
void display()
{
std::cout << "Hello, world" << std::endl;
}
private:
// default constructor
A() {
std::cout << "construction\n";
}
private:
static A* m_pInstance;
};
// init static m_pInstance
A* A::m_pInstance = NULL;
int main()
{
A* ptr1 = A::GetInstance();
A* ptr2 = A::GetInstance();
ptr1->display();
ptr2->display();
//A* ptr3 = new A; // forbidden
//A obj; // forbidden
return 0;
}
//////////////////////////////////////////////////////////////
//示例而已
【xxyyboy】:
定义为 static ini 类的函数
用1static 类指针来直接返回已经初始化过的实体
楼上的都是正确的例子。
【Cocoky】:
singleton
【zwlzwlzwl】:
Class Singleton{
static Singleton s;
int i;
Singleton(int x):i(x) { }
Singleton& operator=(Singleton&);
Singleton(const Singleton&);
public:
static Singleton& instance() { return s;}
int getvalue() { return i;}
void setvalue() { i = x;}
//关键是在类中声明一个类的实例,并将构造函数、拷贝构造函数、赋值构造函数声明为私有的,这样就能防止调用默认构造函数声明类的实例,只能用类的函数instance为一个新地向赋值,这样就保证了一个对象只实例一次。
int main()
{
Singleton& s = Singleton::instance();
cout<<s.getvalue()<<endl;
Singleton& s2 = Singleton::instance();
cout<<s2.getvalue()<<endl;
}
}
- 只能生成一个对象的类(经典设计模式之一)
- C++ 设计一个类,只能生成一个对象
- 题目2:Singelton单例模式:设计一个类,只能生成该类的一个实例。
- 单态设计模式:(最终只能得到一个对象)
- 单态设计模式--一个类只能创建一个实例(对象)
- 设计一个类,我们只能生成该类的一个实例。
- 设计一个类,我们只能生成该类的一个实例
- 设计一个类,我们只能生成该类的一个实例。
- 设计一个类只能生成该类的一个实例
- 设计一个类,只能生成该类的一个实例
- 写一个只能生成两个实例对象的类
- 第七十二题(设计一个类,我们只能生成该类的一个实例)
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 定义一个只能在堆上(栈上)生成对象的类
- 如何定义一个只能在堆上(栈上)生成对象的类
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 定义一个只能在堆上(栈上)生成对象的类
- 如何定义一个只能在堆(栈)上生成对象的类
- 程序员那些装13的面具 有中枪的没?(转)
- 理解RESTful架构
- 回溯法 全排列
- 2013秋13级预备队集训练习1 F - Machined Surfaces
- HTML初学(一)
- 只能生成一个对象的类(经典设计模式之一)
- ASCII码表在线查询(1.0 beta 1)
- PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题
- linux抓包:
- 2013秋13级预备队集训练习1 G - Rotating Sentences
- 查看端口数据流是否有流
- 只能在堆上分配空间的类和只能在栈上分配空间的类
- 要学的
- Android Tombstone/Crash的log分析和定位(救命的文章)