如果不允许异常处理,如果发现传递的参数错误,可以如何停止类的对象构造?

时间:2011-08-05 06:54:03

标签: c++11

class Date
{
    Date(int day, int month, int year) {     }
}
int main()
{
    Date d = Date(100, 2, 1990);
}

这里传递给day的值(100)不对,我的问题是如何在构造函数中检查'day'参数以防止创建对象。 请注意不允许异常处理

2 个答案:

答案 0 :(得分:3)

对RAII等现代C ++编程技术经常提出的一个论点是它们不能在没有异常的情况下使用,因为异常是表示构造函数失败的唯一方法。这绝对是真的。

处理不允许异常的环境的唯一方法是从构造函数中取出初始化。在成员函数或其他东西中执行。

请记住:没有异常的环境不是真正的C ++。你必须更像C-with-classes对待它们。

答案 1 :(得分:2)

有一次我和那些在eCos上开发C ++项目并且没有编译器支持的C ++异常的软件开发者交谈过。因此,他们没有在构造函数中使用抛出异常。

他们的方法是使用像这样的简单构造函数

Date::Date()
 :
 initialized_ (false)
{}

然后总是使用init函数:

bool Date::init(int day, int month, int year)
{
    // return false if there is an error while initializing the object
    // return true if there is no error
    initialized_ = true;

}

他们总是检查init()函数的结果。