c++异常处理

1 为什么我们一直强调不能使用返回错误值的方法来代替异常处理?

   看这个例子:

   int add(int a, int b)

   {

        return a+b;

   }

 

   在这里, 我们无法用返回错误值的方法来表示错误. 因为我们无法分辨返回的值是正确计算的结果还是错误码.

 

2  在判断new是否成功时, 我们究竟是用返回值为null来判断还是用std::bad_alloc异常来判断? 当new无法成功分配内存时, 它会即返回null又抛出std::bad_alloc吗? 不会的. 它们或者返回空值, 或者抛出std::bad_alloc.  关于究竟如何对new进行管理, 我参考国下面链接中的文章. http://bytes.com/topic/c/answers/470836-new-bad_alloc-null,  看来看去, 还是没有一个明确的答案, 看来要得到正确还得要自己动手做实验, 我们用下面的代码分别在vc6和vs 2008下运行, 看看能得到什么结果


#include "stdafx.h"
// newexcp.cpp -- the bad_alloc exception
#include <iostream>
using namespace std;
#include <new>
#include <cstdlib>

struct Big
{
    double stuff[2000];
};
int main(int argc, char* argv[])
{
 Big * pb;
    try {
        cout << "Trying to get a big block of memory:/n";
        pb = new Big[100000];
        cout << "Got past the new request:/n";
    }
    catch (bad_alloc & ba)
    {
        cout << "Caught the exception!/n";
       // cout << ba.what() << endl;
        exit(1);
    }
    if (pb != 0)
    {
        pb[0].stuff[0] = 4;
        cout << "success" << endl;
    }
    else
        cout << "pb is null pointer/n";
    delete [] pb;
    return 0;
}

 

在vc6下, 不会抛出异常, 而是返回空值.

 在vs2008下, 会抛出异常, 不会返回空值.

 

如果我们将pb = new Big[100000];
 改为pb = new(std::nothrow) Big[100000];

那么将会返回空值, 而不会抛出异常.

 

3 int add(int a, int b) throw(string ) 代表着该函数会抛出一个string异常.

   int add(int a, int b) throw()           代表着该函数不会抛出任何异常.

 

那么int add(int a, int b)  代表什么? 也是不抛出异常吗?如果是这样的话, throw()岂不是多此一举吗?

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值