社区
C语言
帖子详情
如何建立一个只能创建一个实例的类
smwu
2003-03-24 07:32:43
其实我觉得这个问题提得很模糊 如果我用
myclass my1;
myclass my2;//这个时候应该出错?出异常?还是my2==my1?
不知道哪位高人能给我一个比较好的回答?
...全文
111
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
打赏
举报
回复
好像以前有人问过了,在构造函数上做手脚,用静态变量。具体你搜一下以前的帖子看看。
【C++】实现
一个
只能
创建
一个
对象的
类
实现
一个
只能
创建
一个
对象的
类
,
一个
类
按理来说肯定能创建出无数个对象,如何让
一个
类
只创建
一个
对象呢? 我们来一步步的看 class A { public: A() {} }; int main() { A a1,a2,a3.....; } 毫无疑问A这个
类
可以
实例
化出无数个对象。我们知道创建对象需要调用构造函数来创建对象 所以我们可以这样一步步的来走: 我们可以把对象的构造函数给屏蔽掉。...
C++
只能
实例
化
一个
对象的
类
# include
# include
using namespace std;1.创建
类
class Student { public: static Student* Limit(); //静态成员函数 void display(); private: static Student *total; //静态数据成员指针
如何创建
一个
类
只能
在堆(栈)上
建立
对象
在C++中,
类
对象的
建立
方式有两种,一种是静态
建立
类
对象,如A a;另一种是动态
建立
类
对象,如A* p = new A; 这两种方式是有区别的: 静态
建立
类
对象:是指全局对象,静态对象,以及分配在栈区域内的对象,编译器对它们的内存分配是在编译阶段就完成的,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成
一个
栈对象。使用这种方法,直接调用
类
的构造函数。
设计
一个
类
:
只能
在堆上创建对象?
只能
在栈上创建对象?
只能
创建
一个
对象?
在C++中,
类
的对象
建立
分为两种,一种是静态
建立
,如A a;另一种是动态
建立
,如A* ptr=new A;这两种方式是有区别的。 静态
建立
一个
类
对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成
一个
栈对象。使用这种方法,直接调用
类
的构造函数; 动态
建立
类
对象,是使用new运算符将对象
建立
在堆空间中。这个过程分为两步,第一步是执...
定义
一个
类
只能
创建
一个
对象
有时我们的程序中需要定义
一个
类
,这个
类
只能
创建
一个
youxiaosh
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章