社区
C语言
帖子详情
如何建立一个只能创建一个实例的类
smwu
2003-03-24 07:32:43
其实我觉得这个问题提得很模糊 如果我用
myclass my1;
myclass my2;//这个时候应该出错?出异常?还是my2==my1?
不知道哪位高人能给我一个比较好的回答?
...全文
81
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
打赏
举报
回复
好像以前有人问过了,在构造函数上做手脚,用静态变量。具体你搜一下以前的帖子看看。
设计
一个
类
,
只能
生成该
类
的
一个
实例
只能
生成
一个
实例
的
类
是实现了Singleton(单例)模式的
类
型。 解题思路:根据题目的要求,1.必须把构造函数设为私有函数,防止他人创建
实例
。 2.在
类
中创建静态私有的
实例
,在需要时创建该
实例
,直到程序结束才销毁。 3.提供
一个
静态的公有的函数用于创建/获取静态私有对象。 在系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统
只能
有
一个
窗口管理器,
设计
一个
只能
创建
一个
唯一
实例
的
类
——单例模式
设计
一个
只能
创建
一个
唯一
实例
的
类
——单例模式 1. 背景 老师布置了
一个
思考题:设计
一个
只能
创建
一个
唯一
实例
的
类
。让我们只要想一下思路即可。自己的第一反应就是设计模式中的单例模式。自己百度了一下单例模式,下面附上自己百度到的认为最好的一篇文章。主要参考链接为:http://blog.csdn.net/lovelion/article/details/7420883。自
java思考题:设计
一个
只能
创建
一个
唯一
实例
的
类
。
思考题:设计
一个
只能
创建
一个
唯一
实例
的
类
。 有很多地方需要用到
只能
创建
一个
实例
的
类
,比如说窗口上的工具箱,如果每次点击工具箱按钮都会创建
一个
工具箱
实例
,那么窗口中会出现很多工具箱,但是我们想要的是点击工具箱如果没有就出现,有了就不再出现了,这就需要用到单例模式。 文章内容取自《大话设计模式》 程杰著 单例模式:保证
一个
类
仅有
一个
实例
,并提供
一个
访问它的全局访问点。
Java中的单例
类
(该
类
始终
只能
创建
一个
实例
)
在某些情况下,要求不允许自由创建该
类
的对象,而只允许该
类
创建
一个
对象,为避免其他
类
自由创建给该
类
的
实例
,应该把该
类
的构造器用private修饰,从而把该
类
的构造器隐藏起来。 另外提供public方法作为该
类
的访问点,用于创建该
类
的对象,且该方法
只能
是static修饰(因为调用该方法之前还不存在对象,因此调用该方法不可能是对象,
只能
是
类
) 此外还需要缓存已经创建的对象,否则该
类
无法知道是否曾经创...
单例
类
(Singleton)
一个
类
始终
只能
创建
一个
实例
单例
类
(Singleton)
一个
类
始终
只能
创建
一个
实例
构造器使用private修饰、;提供
一个
public方法作为该
类
的访问点,该方法必须使用static修饰来作为
类
成员;使用
一个
成员变量缓存已经创建的对象,该成员变量要被静态方法调用,所以也应该用static修饰。 class Singleton { //使用
一个
变量来缓存曾经创建的
实例
private
C语言
69,378
社区成员
243,075
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章