社区
C语言
帖子详情
如何建立一个只能创建一个实例的类
smwu
2003-03-24 07:32:43
其实我觉得这个问题提得很模糊 如果我用
myclass my1;
myclass my2;//这个时候应该出错?出异常?还是my2==my1?
不知道哪位高人能给我一个比较好的回答?
...全文
93
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.在
类
中创建静态私有的
实例
,在需要时创建该
实例
,直到程序结束才销毁...
Java中的单例
类
(该
类
始终
只能
创建
一个
实例
)
在某些情况下,要求不允许自由创建该
类
的对象,而只允许该
类
创建
一个
对象,为避免其他
类
自由创建给该
类
的
实例
,应该把该
类
的构造器用private修饰,从而把该
类
的构造器隐藏起来。 另外提供public方法作为该
类
的访问...
【C++】实现
一个
只能
创建
一个
对象的
类
实现
一个
只能
创建
一个
对象的
类
,
一个
类
按理来说肯定能创建出无数个对象,如何让
一个
类
只创建
一个
对象呢? 我们来一步步的看 class A { public: A() {} }; int main() { A a1,a2,a3.....; } 毫无疑问A这个
类
可以...
c++中创建单
实例
类
如果
一个
类
始终
只能
创建
一个
实例
,则这个
类
被称为单例
类
。在一些特殊情况下,系统会不允许自由创建某个
类
的对象,二十一
只能
为该
类
创建
一个
对象,此时就可以把该
类
的构造方法使用private修饰,将其所有的构造方法...
C++单例模式(
只能
创建
一个
对象的
类
)
一个
类
只能
创建
一个
对象,即单例模式,该模式可以保证系统中该
类
只有
一个
实例
,并提供
一个
访问它的全局访问点,该
实例
被所有程序模块共享。比如在某个服务器程序中,该服务器的配置信息存放在
一个
文件中,这些配置...
C语言
70,036
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章