关于单件模式

justp6 2008-10-27 12:13:47
看到网上实现的代码,只是把默认构造函数定为protected或者private,是不是也应该把复制构造函数定为protected或者private?
...全文
75 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-10-27
  • 打赏
  • 举报
回复

//如果需要这样做的话,说明你的程序设计有问题.
//相当于是,const可以保证你从语言上不修改,但是不能保证你不去破坏
//相当于,private可以保证语言上的不可见,但是不能保证你把成员hack掉
#include <iostream>
using namespace std;

class A
{
A(){}
public:
static A* Instance()
{
static A a;
return &a;
}
};

int main()
{
A a(*A::Instance());
return 0;
}
arong1234 2008-10-27
  • 打赏
  • 举报
回复
单件根本不该定义拷贝构造,既然你只允许生成一个示例,何来拷贝一说?拷贝不就生成另外一个实例了?
[Quote=引用楼主 justp6 的帖子:]
看到网上实现的代码,只是把默认构造函数定为protected或者private,是不是也应该把复制构造函数定为protected或者private?
[/Quote]
帅得不敢出门 2008-10-27
  • 打赏
  • 举报
回复
将构造函数设计成 protected 的目的是防止在 class 外面 new ,有人可能会设计成 private ,如果考虑到有可能会继承这个类的话,还是将构造函数设计成 protected 比较好,还需要加一个 virtual 析构函数。为了防止别人复制 Singleton 对象:
Singleton* pSingleton = Singleton::Instance();
Singleton s1 = *pSingleton;
Singleton s2 = *pSingleton;
需要将拷贝构造(copy constructor)函数变成 private。


visame 2008-10-27
  • 打赏
  • 举报
回复
1. MySingleton1的构造函数私有,防止了程序员随意构造它的实例。

2. 同样,拷贝构造函数MySingleton1(const MySingleton1&)也被声明为私有。

64,683

社区成员

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

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