免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1856 | 回复: 3
打印 上一主题 下一主题

求助:一个“禁止构造、禁止复制”且“没有派生类”的类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-12-11 00:42 |只看该作者 |倒序浏览
有一个“禁止构造、禁止复制”且“没有派生类”的类,要通用怎样的方法使用
,又或者定义这样的一个类根本没有什么意义?
如:
class A
{
private:
        A();
        A(const A&;
        A& operator=(const A&;
public:
        void use(){}
};

论坛徽章:
0
2 [报告]
发表于 2004-12-11 11:43 |只看该作者

求助:一个“禁止构造、禁止复制”且“没有派生类”的类

不大懂C++,瞎说几句
禁止构造,有纯虚函数就行了吧?
禁止复制,自己不定义copy-constructor,还有指针成员,也行了吧?
禁止派生,用什么方法?把所有成员都声明为private?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-12-11 12:37 |只看该作者

求助:一个“禁止构造、禁止复制”且“没有派生类”的类

  1. class Singleton
  2. {
  3.  public:
  4.  static Singleton& Instance()
  5.  {
  6.   if(!pInstance_){
  7.    if(destroyed_){ // 引用是否已经失效
  8.     OnDeadReference();
  9.    }
  10.    else {
  11.     Create(); // 第一次时创建实例
  12.    }
  13.   }
  14.   return *pInstance_;
  15.  }
  16.  private:
  17.   Singleton(); // 禁止默认构造
  18.   Singleton(const Singleton&); // 禁止拷贝构造
  19.   Singleton& operator= (const Singleton&); // 禁止赋值操作
  20.   static void Create() // 传加创建的实例引用
  21.   {
  22.    static Singleton theInstance;
  23.    pInstance_ = &theInstance;
  24.   }
  25.   static void OnDeadReference()
  26.   {
  27.    throw std::runtime_error(“ 实例被不正当消毁”);
  28.   }
  29.   virtual ~Singleton()
  30.   {
  31.    pInstance- = 0;
  32.    destroyed_ = true;
  33.   } static Singleton *pInstance_;
  34.   static bool destroyed_;
  35. }
  36. // Singleton.cpp中静态成员变量初始化
  37. Singleton* Singleton::pInstance_ = 0;
  38. Bool Singleton::destroyed_ = false;
复制代码

Singleton模式是一种保证一个对象(class)只有一个实体,并为它提供一个全局访问点。Singleton是一种经过改进的全局变量,既在程序中只能有唯一实体的类型,它的重点主要集中在产生和管理一个独立对象上,而且不允许产生另一个这样的对象。

Singleton模式实现中只有一个public成员Instance()用来第一次使用时创建单一实例,当第二次使用时静态变量将已经被设定好,不会再次创建实例。还将默认构造函数、拷贝构造函数和赋值操作符放在private中,目地是不让用户使用它们。另外,为避免实例意外消毁后再实例化情况,加入静态布尔变量destroy_来进行判断是否出错,从而达到稳定性。

论坛徽章:
0
4 [报告]
发表于 2004-12-11 13:20 |只看该作者

求助:一个“禁止构造、禁止复制”且“没有派生类”的类

>;>;禁止复制,自己不定义copy-constructor,还有指针成员,也行了吧?
>;>;禁止构造,有纯虚函数就行了吧?
都应该声明一个相应的构造和复制函数放在private中,不然编译器会自动生成。
至于禁止派生就不清楚了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP