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




