怎么样实现一个只能在堆上创建的类

qwer_boo 2011-04-27 09:09:56
如题谢谢!
...全文
231 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwer_boo 2011-04-28
  • 打赏
  • 举报
回复
谢谢各位!
xmu_才盛 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
额 将析构函数设为private
[/Quote]

singleton模式 是将构造函数设置成为保护或者私有吧? 然后开放静态接口出来。。
pathuang68 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

额 将析构函数设为private
[/Quote]

++
用Singleton设计模式就OK了。实现Singleton有几个要点:
1. 构造方法是private的;
2. 有一个private的静态变量,其类型就是Singleton本身;
3. 有一个静态public的方法getInstance(),其返回类型是Singleton;
4. getInstance()要保证线程安全。

参考:
C++实现Singleton模式
ww884203 2011-04-28
  • 打赏
  • 举报
回复
构造函数为私有就不能直接构造新对象了,只能通过一个static的GetInstance方法来获取对象,在GetInstance方法中使用new来创建对象,对象就只能在堆中
damingg 2011-04-28
  • 打赏
  • 举报
回复
to11楼,将析构函数设为私有,你试过了吗?
toadzw 2011-04-28
  • 打赏
  • 举报
回复
错了,是将构造函数设置为private然后写一个公用函数调用构造函数;在构造函数中以new返回一个对象就行了
toadzw 2011-04-28
  • 打赏
  • 举报
回复
额 将析构函数设为private
shaotine_wu 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 newstudent_never 的回复:]

引用 1 楼 pengzhixi 的回复:
额 将析构函数设为private


singleton模式 是将构造函数设置成为保护或者私有吧? 然后开放静态接口出来。。
[/Quote]
同问
manmount 2011-04-27
  • 打赏
  • 举报
回复
好像用struct能直接创建。

struct myclass
{
myclass();

//do something

~myclass();

};
bluesky12312388 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zicheng_lin 的回复:]

写了一个单例模式..
C/C++ code

#ifndef SINGLETON_H
#define SINGLETON_H
#include <iostream>

class Singleton
{
public:
static Singleton* GetInstance();
private:
static Singleton* instance;
Singl……
[/Quote]
可能会有继承等情况
zicheng_lin 2011-04-27
  • 打赏
  • 举报
回复
写了一个单例模式..

#ifndef SINGLETON_H
#define SINGLETON_H
#include <iostream>

class Singleton
{
public:
static Singleton* GetInstance();
private:
static Singleton* instance;
Singleton();
~Singleton();
};
#endif

#include "Singleton.h"

Singleton* Singleton::instance = NULL;

Singleton* Singleton::GetInstance()
{
if(instance == NULL)
{
instance = new Singleton();
}
return instance;
}

Singleton::Singleton()
{
}
Singleton::~Singleton()
{
delete instance;
}

#include <iostream>
#include "Singleton.h"
using namespace std;

int main()
{
Singleton* a = Singleton::GetInstance();
Singleton* b = Singleton::GetInstance();
if(a == b)
cout<<"相等"<<endl;

system("pause");
return 0;
}

还有,为什么要把析构函数写成private 呢,求解释
zhonglingqqxh 2011-04-27
  • 打赏
  • 举报
回复
参见《more effective c++》
zicheng_lin 2011-04-27
  • 打赏
  • 举报
回复
没人回答吗?
沧海阿木 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
额 将析构函数设为private
[/Quote]
++
bluesky12312388 2011-04-27
  • 打赏
  • 举报
回复
写个构造函数,然后不实现,提供GetInstance接口返回指向一个新对象的指针。
(怎么看怎么像单例模式)
pengzhixi 2011-04-27
  • 打赏
  • 举报
回复
额 将析构函数设为private
zicheng_lin 2011-04-27
  • 打赏
  • 举报
回复
关于C++单例模式,在CSDN上的一个帖子上看到,说不能用指针,说New了,没地方释放,求解释,C++单例模式到底应该如何写?

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧