0

我该怎么做呢,

我有一个名为 LargeInteger 的类,它存储了最多 20 位数字。我做了构造函数

LargeInteger::LargeInteger(string number){ init(number); }

现在,如果数字是 > LargeInteger::MAX_DIGITS (static const member),即 20,我不想创建对象并抛出异常。

我创建了一个类 LargeIntegerException{ ... }; 并做到了

void init(string number) throw(LargeIntegerException);
void LargeInteger::init(string number) throw(LargeIntegerException)
{
    if(number.length > MAX_DIGITS)
    throw LargeIntegerException(LargeIntegerException::OUT_OF_BOUNDS);
    else ......
}

所以现在我修改了构造函数

LargeInteger::LargeInteger(string number)
{ try {init(number);} catch(LargeIntegerExceptione) {...} }

现在我有 2 个问题
1.如果抛出异常,会创建这个类的对象吗?
2.如属上述情况如何处理?

4

2 回答 2

4

不,如果在构造函数中抛出异常,则不会构造对象(前提是您没有像您一样捕获它)。

所以 - 不要捕获异常,而是让它传播到调用上下文。

IMO,这是正确的方法 - 如果无法直接初始化对象,请在构造函数中抛出异常并且不要创建对象。

于 2012-07-28T00:53:51.573 回答
1

没有理由在构造函数中捕获异常。您希望构造函数失败,因此构造函数之外的东西必须捕获它。如果构造函数通过异常退出,则不会创建对象。

LargeInteger(string num) { init(num); } // this is just fine.
于 2012-07-28T01:04:35.887 回答