CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

大家帮我看看我的类这样设计行不行

楼主ppddt008(pp点点通零零发)2005-04-02 21:14:05 在 C/C++ / C++ 语言 提问

class   B   {  
  public:  
          static   void  
          close()   {  
                  delete   pb_;  
          }  
   
  protected:  
          virtual   ~B()   {  
          }  
   
  protected:  
          static   B*   pb_;  
  };  
   
  B*   B::pb_   =   0;  
   
  class   D   :   public   B   {  
  public:  
          static   B*  
          instance()   {  
                  if   (   !pb_   )  
                          pb_   =   new   D;  
   
                  return   pb_;  
          }  
   
  private:  
          D(const   D&);  
          D&  
          operator=(const   D&);  
  }; 问题点数:0、回复次数:13Top

1 楼Underwind(Underwind)回复于 2005-04-02 21:18:33 得分 0

想实现singleton   ?   编译一下呗,没有error就是行Top

2 楼ppddt008(pp点点通零零发)回复于 2005-04-02 21:21:00 得分 0

编译是没有问题的。  
  不过我不知道吧close放在B好不好?Top

3 楼Underwind(Underwind)回复于 2005-04-02 21:24:21 得分 0

为什么不把close()设置成private,然后再virtual   ~B()中调用它呢?Top

4 楼ppddt008(pp点点通零零发)回复于 2005-04-02 21:26:10 得分 0

在~B调用它,不是吧,你想让程序死循环?Top

5 楼ppddt008(pp点点通零零发)回复于 2005-04-02 21:28:27 得分 0

class   B   {  
  protected:  
          virtual   ~B()   {  
          }  
  };  
   
  class   D   :   private   B   {  
  public:  
          static   D*  
          instance()   {  
                  if   (   !pd_   )  
                          pd_   =   new   D;  
   
                  return   pd_;  
          }  
   
          static   void  
          close()   {  
                  delete   pd_;  
          }  
   
  private:  
          D(const   D&);  
          D&  
          operator=(const   D&);  
   
  private:  
          D*   pd_;  
  };  
   
  D*   D::pd_   =   0;Top

6 楼ppddt008(pp点点通零零发)回复于 2005-04-02 21:31:43 得分 0

其实我想做的就是生成一些单例类,这些类有很多代码是重复的,所以我就想让他们都继承于B。  
  但是静态函数有不能使虚函数,看来只能用私有继承了。Top

7 楼bing_huo(我是一个演员!)回复于 2005-04-02 23:48:34 得分 0

既然是singleton   为什么还要new和delete?  
   
  static   D*   instance()    
  {  
                  static   D   _d;  
   
                  return   &_d;  
  }  
   
  为什么不这样做呢?  
  Top

8 楼ppddt008(pp点点通零零发)回复于 2005-04-03 12:56:13 得分 0

upTop

9 楼ppddt008(pp点点通零零发)回复于 2005-04-03 14:54:12 得分 0

upTop

10 楼zhaozhencn(FlyingDonkey)回复于 2005-04-04 08:37:04 得分 0

class   B   {  
  public:  
          virtual   void   close()    
  {  
        delete   this;  
  }  
   
  protected:  
          virtual   ~B()   {  
          }  
   
   
  };  
   
  class   non-copy  
  {  
  private:     //non-copy(copy   construct   ,assign   operator   function  
          non-copy(const   non-copy&)  
          non-copy&   operator=(const   non-copy&);  
  };  
   
  class   D   :   public   B,   public   non-copy  
  {  
  public:  
          static   D*  
          instance()   {  
                  if   (   !pd_   )  
                          pd_   =   new   D;  
   
                  return   pd_;  
          }  
   
  private:  
          D*   pd_;  
  };  
   
  D*   D::pd_   =   0;  
   
  上面的代码中,  
  class   B   //singleton接口。  
   
  class   non-copy   //non-copy接口  
   
  D   *p   =   D::instance(   );  
  ......  
  p->close(   );  
   
  不过我觉得singleton的代码可不可以不用new在heap中分配空间,这样修改如下:  
   
   
   
  class   D   public:  
          static   D*  
          instance()   {  
                  static   D   s_StaticObject;     //不用担心忘记delete   了。这个函数内的静态对象也只会构造一次。  
                  return   &s_StaticObject;  
          }  
   
  private:  
          D(const   D&);  
          D&  
          operator=(const   D&);  
  };  
   
   
  Top

11 楼zhaozhencn(FlyingDonkey)回复于 2005-04-04 08:38:20 得分 0

class   D   public,多了一个publicTop

12 楼ppddt008(pp点点通零零发)回复于 2005-04-04 20:54:50 得分 0

up  
   
  飞驴好。Top

13 楼zhaozhencn(FlyingDonkey)回复于 2005-04-05 11:48:57 得分 0

可以考虑提供一个类工厂  
   
  class   CreateStaticObjectFactory  
  {  
      protected:  
            CreateStaticObjectFactory(   );  
      public:  
            CreateStaticObjectFactory&   Instance(   )  
            {  
                static   CreateStaticObjectFactory     object;  
                return   object;  
            }  
     
      public:  
        template<typename   T>  
        T*     CreateObject(   )   const  
        {  
                return   T();  
          }  
  };  
   
   
  Demo   *p   =   CreateStaticObjectFactory::Instance().CrateObject<Demo>(   );  
   
   
  如果对于大量的singleton对象,提供这样一Factory比较适合于集中管理。  
   
         
         
  Top

相关问题

  • Sheet类设计
  • 文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类:
  • VB6用数据环境设计器和数据报表设计器设计打印的问题,哪位前辈行行好帮帮我这可怜的人吧!
  • 这个类怎么设计?
  • 这样设计一个类
  • 关于类的设计
  • 一个类设计题
  • 设计实体类问题:
  • 设计实体类问题:
  • 大家帮忙设计设计

关键词

  • pb
  • 代码
  • virtual
  • createstaticobjectfactory
  • pd
  • non
  • copy
  • instance
  • singleton
  • protected

得分解答快速导航

  • 帖主:ppddt008

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo