社区
C语言
帖子详情
如何建立一个只能创建一个实例的类
smwu
2003-03-24 07:32:43
其实我觉得这个问题提得很模糊 如果我用
myclass my1;
myclass my2;//这个时候应该出错?出异常?还是my2==my1?
不知道哪位高人能给我一个比较好的回答?
...全文
98
16
打赏
收藏
如何建立一个只能创建一个实例的类
其实我觉得这个问题提得很模糊 如果我用 myclass my1; myclass my2;//这个时候应该出错?出异常?还是my2==my1? 不知道哪位高人能给我一个比较好的回答?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
smwu
2003-03-25
打赏
举报
回复
实际上我一开始也是这么想的 屏蔽普通的实例创建方式 采用内部外部的函数来实现一个classfactory的功能 但是这么做无疑是对这个singleton的使用做了比较大的限制的方法
是否可能在构造函数和类的结构上做文章 使得创建的第二个变量和第一个“实际上”是同一个?
skfox
2003-03-25
打赏
举报
回复
你们看看候捷翻译的More Effictive C++就知道了,里面有现成的例子,我上机运行OK
VCnst2
2003-03-25
打赏
举报
回复
好像mfc中用了互斥量解决
shornmao
2003-03-25
打赏
举报
回复
请看<<design pattern>>中的单件(Singleton)模式,上面写的代码或多或少都有一点缺陷,当然Singleton也不是没有缺点。
pleasureboy
2003-03-25
打赏
举报
回复
类的学习很重要.
刚开始学就能在这里学到很多多好东东
希望大家多给我点问题的答案啊
glassshark
2003-03-24
打赏
举报
回复
将类数据成员全部定义为静态成员。
sailor_Song
2003-03-24
打赏
举报
回复
up
TopCat
2003-03-24
打赏
举报
回复
晕倒,这个例子是我写的。
不过前几天刚看了Effictive C++,发现这个例子还是有点问题,应该改成如下:
class CDebug
{
public:
~CDebug();
void Print(const char *prompt, ...);
static CDebug &GetInstance()
{
static CDebug s_debug;
return s_debug;
}
private:
HANDLE m_StdOut;
//防止直接生成实例
CDebug();
};
huazaimh
2003-03-24
打赏
举报
回复
一个朋友给我的回答,你可以看看,这个问题有几个朋友提出来过!
class CDebug
{
public:
~CDebug();
void Print(const char *prompt, ...);
static CDebug &GetInstance() { return s_debug; };
private:
static CDebug s_debug;
HANDLE m_StdOut;
CDebug();
};
Cybergate
2003-03-24
打赏
举报
回复
问题点数: 0
alan118
2003-03-24
打赏
举报
回复
我在www.vckbase.com上看到的代码:
////////MyClass 只能有一个对象
#include <iostream>
using namespace std;
class MyClass
{
public:
static MyClass* GetInstance()
{
static bool bInit = false;
if (bInit == false)
{
bInit = true;
cout<<"object building......"<<endl;
m_pInstance = new MyClass();
}
cout<<"one object has been built."<<endl;
return m_pInstance;
}
private:
MyClass() {}
static MyClass *m_pInstance;
};
MyClass* MyClass::m_pInstance = NULL;
int main()
{
MyClass* p=MyClass::GetInstance();
MyClass* pp=MyClass::GetInstance();
return 0;
}
输出:
object building.....
one object has been built
one object has been built
这是设计模式里的singleton,还没看到,只是翻了一下,有点印象,呵呵
tuxw
2003-03-24
打赏
举报
回复
class one {
static int cnt;
...
public:
one()
{
cnt++;
if(cnt!=1) {
cout << "can't create two object of one\n";
exit(0);
}
...
}
};
int one::cnt=0;
TopCat
2003-03-24
打赏
举报
回复
其实很简单,一个Singleton根本不让你写这样的语句:MyClass my1; //错误!
因为这样根本无法保证单实例。
一般的形式是这样:MyClass &rmy1 = MyClass::GetInstance(); 或者是: MyClass *pmy1 = MyClass::GetInstance();
只允许用引用或者指针来指向这个“单个实例”
wshcdr
2003-03-24
打赏
举报
回复
有一点点明白
skfox
2003-03-24
打赏
举报
回复
1,将构造函数设置为私有的(这样就不能创建类了)
2,在该类中声明一友元函数(返回值为类)
3,在友元函数内,New一个对象的实例,注意必须是static的(保证只有一个实例),并返回该类
4,然后在main()中调用这个友元函数就创建了实例,并能保证只有一个
亮剑_
2003-03-24
打赏
举报
回复
好像以前有人问过了,在构造函数上做手脚,用静态变量。具体你搜一下以前的帖子看看。
设计
一个
只能
创建
一个
唯一
实例
的
类
——单例模式
设计
一个
只能
创建
一个
唯一
实例
的
类
——单例模式 1. 背景 老师布置了
一个
思考题:设计
一个
只能
创建
一个
唯一
实例
的
类
。让我们只要想一下思路即可。自己的第一反应就是设计模式中的单例模式。自己百度了一下单例模式,下面附上自己百度到的认为最好的一篇文章。主要参考链接为:http://blog.csdn.net/lovelion/article/details/7420883。自
设计
一个
类
,
只能
生成该
类
的
一个
实例
只能
生成
一个
实例
的
类
是实现了Singleton(单例)模式的
类
型。 解题思路:根据题目的要求,1.必须把构造函数设为私有函数,防止他人创建
实例
。 2.在
类
中创建静态私有的
实例
,在需要时创建该
实例
,直到程序结束才销毁。 3.提供
一个
静态的公有的函数用于创建/获取静态私有对象。 在系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统
只能
有
一个
窗口管理器,
java思考题:设计
一个
只能
创建
一个
唯一
实例
的
类
。
思考题:设计
一个
只能
创建
一个
唯一
实例
的
类
。 有很多地方需要用到
只能
创建
一个
实例
的
类
,比如说窗口上的工具箱,如果每次点击工具箱按钮都会创建
一个
工具箱
实例
,那么窗口中会出现很多工具箱,但是我们想要的是点击工具箱如果没有就出现,有了就不再出现了,这就需要用到单例模式。 文章内容取自《大话设计模式》 程杰著 单例模式:保证
一个
类
仅有
一个
实例
,并提供
一个
访问它的全局访问点。
c++中创建单
实例
类
如果
一个
类
始终
只能
创建
一个
实例
,则这个
类
被称为单例
类
。在一些特殊情况下,系统会不允许自由创建某个
类
的对象,二十一
只能
为该
类
创建
一个
对象,此时就可以把该
类
的构造方法使用private修饰,将其所有的构造方法隐藏起来。一旦把该
类
的构造方法隐藏起来,则需要提供
一个
public方法,作为该
类
的访问点,用于创建该
类
的对象,并且该方法必须使用static修饰(因为调用该方法之前还不存在对象,因此调用该方法的不
C++单例模式(
只能
创建
一个
对象的
类
)
单例模式
一个
类
只能
创建
一个
对象,即单例模式,该模式可以保证系统中该
类
只有
一个
实例
,并提供
一个
访问它的全局访问点,该
实例
被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在
一个
文件中,这些配置数据由
一个
单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。 方式一(饿汉模式) 不管你将来用不用,程序启动时就创建
一个
唯一的
实例
对象 构造函数私有 提供
一个
静态的方法返回单例 声明
一个
静态的单例成员 拷贝构造和赋值声明为delete函
C语言
70,036
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章