编写类时的异常处理实践

时间:2012-03-14 23:09:13

标签: exception exception-handling

当你编写一个抛出异常的类时,在类中处理异常是一个好主意吗?或者让这个类的用户在主程序中处理它更好吗?

例如,用以下内容编写一个类是个好主意吗?

class Queue{
    Object Queue<Object>::getFront( )
    {
        try
        {
            if( isEmpty( ) )
                throw Underflow( );
        } catch(Underflow E)
        {
            cerr<<"caught underflow\n";
            return null;
        }
        return queuearray[ front ];
    }
}

或者只是拥有

更好
Object Queue<Object>::getFront( )
{
    if( isEmpty( ) )
        throw Underflow( );
    return queuearray[ front ];        
}

然后让用户在main或函数的任何地方实现异常 被叫?

1 个答案:

答案 0 :(得分:0)

这取决于处理异常的最佳位置。如果异常是可恢复的并且不影响程序的流程,那么您可以安静地处理它并进行记录。如果您认为调用者可能能够更好地决定要做什么,那么抛出异常。

请记住,在情况非常特殊的情况下,您应该只使用例外情况 - 不受应用程序控制的限制。您在上面说明的例子并不是很理想。如果你抛出异常,为什么还要在下面的线上抓住它呢?只是做

class Queue{
Object Queue<Object>::getFront( )
{
    try
    {
        if( isEmpty( ) )
           return null;
    }
    return queuearray[ front ];
    }
}
}