抛出异常、捕获的问题
C++里发生错误会抛出异常,某些异常的默认处理方式是terminate程序。
我一直使用c做开发,函数调用是否成功几乎全靠返回值,外加一些相关数据(例如errno),从没想过要捕获异常!现在为了简化开发工作量,要使用容器list,其他代码仍然是c的,比如malloc。所以要将.c硬生生改成.cpp的。
问题是:.cpp的文件使用malloc,如果失败,会不会像new那样抛出异常然后terminate?
目前个人认为,C++虽然提供了一些类来完成工作,降低了开发工作量,但是我更喜欢c那种单纯的语言,对每一个函数都做出严谨的判断,而C++会抛出各种恶心的异常,我写一段代码,哪里会知道有啥异常啊,有一种捕风捉影的感觉。
大伙儿说说,你们对try catch的理解,怎么适应从c到C++的过渡? C/C++ 异常捕获 terminate
[解决办法]
cpp的文件使用malloc,如果失败, 不会像new那样抛出异常
[解决办法]
cpp的文件使用malloc,如果失败, 不会像new那样抛出异常
[解决办法]
std::list 那里扔异常,标准有规定的。要是懒得看标准,可以看看 cplusplus.com。
malloc 不会抛异常的,需要检查返回值。
[解决办法]
new也可能不throw:
new (std:;nothrow) ClassA()
[解决办法]
C++的异常也不恶心吧,你以前既然可以用C处理这些问题,就应该知道会有哪些异常啊,哪有什么捕风捉影的?
malloc的话不会抛异常的,要你自己来判断的。new的话也未必一定会抛异常,看你怎么做了。
举个简单的例子吧,比如:
#include <iostream>和之前一样的,只是用if判断以后,改成了throw,然后到调用的地方进行处理而已。没有你说的捕风捉影吧。
double Div(double x,double y)
{
if(y==0)
throw y;//抛出异常
return x/y;
}
int main()
{
double x=5.5,y=0.0;
try
{
std::cout<<x<<"/"<<y<<"="<<Div(x,y)<<std::endl;
}
catch(double)
{
std::cout<<"除数为0.0,计算错误!"<<std::endl;
}
return0;
}