64,639
社区成员
发帖
与我相关
我的任务
分享
class C
{
int xx,yy;
public:
C(int x,int y)
{
if(xx,yy为合格参数)
{
xx=x;
yy=y;
}
else
{
... //终止此次实例的创建,并使调用者获得一个NULL指针
}
}
~C(){};
};
int main()
{
C* p=new C(3,4); //我期望如果参数不合格则p=NULL;
if(p)
{
...
}
}
A *a = new a();
if (!a->init(xx, yy))
{
delete a;
// 其他错误处理
}
class A
{
private:
int xx,yy;
A(int x,int y){xx=x;yy=y;}; //声明为私有的,杜绝通过CreateObject以外途径创建实例
~A(){};
bool IsValidate() //这个函数用来判断参数是合格的
{
//....
};
public:
static A* CreateObject(int x,int y) //声明为静态成员
{
A* p=new A(x,y);
if(!p)return 0;
if(p->IsValidate())return p;
delete p;
return 0;
}
void Release()
{
delete this;
}
public:
void Show()
{
printf("%d,%d\n",xx,yy);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=0;i<0xFFFFFFFF;i++) //循环几亿次看看会不会泄露等错误
{
A* pa=A::CreateObject(4,4);
if(pa)
{
//pa->Show();
pa->Release();
}
}
return 0;
}