CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

C++类声明了私有构造函数之后的内存错误

楼主entaoyang(entaoyang)2005-04-03 05:42:43 在 C/C++ / C++ 语言 提问

请看下面一个简单的C++类,使用了私有构造函数,运行结果不是我想要的,在Win2003下面甚至发生了内存不能为READ的错误!  
   
  #include   <iostream>  
  #include   <conio.h>  
  using   namespace   std;  
   
  class   A  
  {  
  private:                       //请注意,我在这里声明的是私有构造函数  
          A():value(0){}  
          A(int   val):value(val){}  
  public:  
        static   bool   Create(A*   pA)  
          {  
                  pA=new   A();  
                  return   pA==NULL   ?   false   :   true;  
          }  
        static   bool   Create(A*   pA   ,   int   val)  
          {  
                  pA=new   A(val);  
                  return   pA==NULL   ?   false   :true;  
          }  
        static   void   Destory(A*   pA)  
          {  
                  delete   pA;  
                  pA=NULL;  
          }  
  public   :  
          void   Show(void)  
          {  
                  cout<<"The   Value=";  
                  cout<<value;  
          }  
   
  private:  
          int   value;  
  };  
   
  int   main(void)  
  {  
          A*   pA;  
          if(A::Create(pA,12345))  
                  pA->Show();  
          else  
                  cout<<"PA   Is   NULL"<<endl;  
          A::Destory(pA);  
   
          cout<<endl<<"End   The   Program   ,   Pess   Any   Key   To   Escape";  
          while(!kbhit());  
  }  
   
  我期盼的输出是  
   
  The   value=12345  
  End   the   Program,.....  
   
  以下是在Win98下的实际运行结果:  
  The   Value=8979600  
  End   The   Program   ,   Pess   Any   Key   To   Escape  
  在Win2003下面会在A::Show函数种的cout<<value语句处发生内存不能为读的错误,我始终想不通  
  那位大虾知道这是怎么回事阿 问题点数:20、回复次数:6Top

1 楼xxxdg(学习中)回复于 2005-04-03 05:49:30 得分 10

God!  
   
  你要想通过函数为指针初始化,应该:  
   
  static   bool   Create(A   **   pA)  
          {  
                  *pA=new   A();  
                  return   pA==NULL   ?   false   :   true;  
          }  
   
  其它类似Top

2 楼xxxdg(学习中)回复于 2005-04-03 05:52:14 得分 0

你的原代码其实造成了内存泄露,  
  函数中分配的   pA   =   new   A   丢失了。Top

3 楼xxxdg(学习中)回复于 2005-04-03 05:53:05 得分 0

调用的时候给:  
   
  if(A::Create(&pA,12345))  
                  pA->Show();Top

4 楼darkstar21cn(≮天残≯无畏)(死亡进行时)回复于 2005-04-03 07:55:22 得分 0

static并不能调用成员函数,你的初始化并没有成功。  
  故而出错。Top

5 楼longlijun(风之力)回复于 2005-04-03 09:38:53 得分 10

C基本问题,   传递指针的指针,参数有误  
  类这样设计是没有错的  
   
  #include   <iostream>  
  #include   <conio.h>  
  using   namespace   std;  
   
  class   A  
  {  
  private:                       //请注意,我在这里声明的是私有构造函数  
          A():value(0){}  
          A(int   val):value(val){}  
  public:  
        static   bool   Create(A**   pA)  
          {  
                  *pA=new   A();  
                  return   pA==NULL   ?   false   :   true;  
          }  
        static   bool   Create(A**   pA   ,   int   val)  
          {  
                  *pA=new   A(val);  
                  return   pA==NULL   ?   false   :true;  
          }  
        static   void   Destory(A*   pA)  
          {  
                  delete   pA;  
                  pA=NULL;  
          }  
  public   :  
          void   Show(void)  
          {  
                  cout<<"The   Value=";  
                  cout<<value;  
          }  
   
  private:  
          int   value;  
  };  
   
  int   main(void)  
  {  
          A*   pA;  
          if(A::Create(&pA,12345))  
                  pA->Show();  
          else  
                  cout<<"PA   Is   NULL"<<endl;  
          A::Destory(pA);  
   
          cout<<endl<<"End   The   Program   ,   Pess   Any   Key   To   Escape";  
          while(!kbhit());  
   
  return   0;  
  }  
  Top

6 楼entaoyang(entaoyang)回复于 2005-04-04 12:52:12 得分 0

明白了Top

相关问题

  • C++拷贝构造函数
  • C++类的构造函数...
  • C++类的构造函数
  • 如何生成一个构造函数是私有函数的类的对象?
  • delphi中可以有私有构造函数吗?
  • 关于C++的拷贝构造函数
  • C++中构造函数的问题
  • 关于C++的构造函数
  • C++构造函数与析构函数的问题
  • C++的基于对象的部分(构造函数,拷贝构造函数)

关键词

  • c++
  • 函数
  • null
  • pa
  • 私有构造函数
  • val
  • 声明
  • show
  • cout
  • bool create

得分解答快速导航

  • 帖主:entaoyang
  • xxxdg
  • longlijun

相关链接

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

广告也精彩

反馈

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