C++的类中有什么方法做到依据构造函数参数终止类的创建
如有这么一个类:
希望在类的构造函数中实现这么个功能。
我试过在构造函数中使用语句:
delete this;
但是这样的话上层的调用代码无法知道类实例到底有没有创建成功(即上面main函数中p=new C(3,4))的p的值不受自己指定。
还试了下重载new操作符,虽然可以使p的值为NULL,但是如果p的值为NULL则根本就不会再执行构造函数了,函数new的执行是在构造函数之前的。如果构造函数能和重载的new互动就好了,可是new是静态成员。
如果有许多些复杂的参数,那么要在调用new之前调用太多的判断,有点麻烦。
我以前的做法就是在类中设置了一个标志,指示实例的创建是否合格,但是这样还是要在类的外部调用delete删除不合格的实例。
其实我就是有个简朴的期望:类写的复杂一点无所谓,关键是使用类的地方代码要清爽。
我弄来弄去都实现不了这样一个类,也不知道是不是C++不可实现这样的要求,但我觉得我的想法很合理。
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)
{
...
}
}
希望在类的构造函数中实现这么个功能。
我试过在构造函数中使用语句:
delete this;
但是这样的话上层的调用代码无法知道类实例到底有没有创建成功(即上面main函数中p=new C(3,4))的p的值不受自己指定。
还试了下重载new操作符,虽然可以使p的值为NULL,但是如果p的值为NULL则根本就不会再执行构造函数了,函数new的执行是在构造函数之前的。如果构造函数能和重载的new互动就好了,可是new是静态成员。
如果有许多些复杂的参数,那么要在调用new之前调用太多的判断,有点麻烦。
我以前的做法就是在类中设置了一个标志,指示实例的创建是否合格,但是这样还是要在类的外部调用delete删除不合格的实例。
其实我就是有个简朴的期望:类写的复杂一点无所谓,关键是使用类的地方代码要清爽。
我弄来弄去都实现不了这样一个类,也不知道是不是C++不可实现这样的要求,但我觉得我的想法很合理。
...全文
相关推荐
在C++中子类继承和调用父类的构造函数方法
"在C++编程中,子类继承父类是面向对象设计的一个关键特性。子类可以访问并重用父类的属性和方法,但构造函数是特殊的一种,它不能被直接继承。在创建子类对象时,需要确保父类的数据成员得到初始化。本文探讨
C++类继承之子类调用父类的构造函数的实例详解
在C++类继承中,子类可以继承父类的成员变量和成员函数,但是在子类中调用父类的构造函数时需要特殊处理。在本文中,我们将通过一个实例来详细介绍C++类继承之子类调用父类的构造函数的实现方法。
解析C++中构造函数的默认参数和构造函数的重载
在C++中,构造函数是一种特殊类型的成员函数,用于创建类的新对象,并初始化其数据成员。构造函数与普通函数的一个关键区别在于,它可以带有默认参数。这允许程序员在不提供所有必需参数的情况下创建对象,从而提
c++中拷贝构造函数的参数类型必须是引用
"C++中的拷贝构造函数参数必须为引用的原因主要涉及到函数调用时的值传递机制以及防止无限递归的问题。"在C++编程语言中,拷贝构造函数是一个特殊的构造函数,用于创建一个对象的新副本,通常在需要复
C++构造函数重载
在C++编程语言中,构造函数是类的一个特殊成员函数,它的主要职责是初始化新创建的对象。


