我编写了简单的 C# 控制台应用程序:
class Mystery
{
static void Main(string[] args)
{
MakeMess();
}
private static void MakeMess()
{
try
{
System.Console.WriteLine("try");
throw new Exception(); // let's invoke catch
}
catch(Exception)
{
System.Console.WriteLine("catch");
throw new Exception("A");
}
finally
{
System.Console.WriteLine("finally");
throw new Exception("B");
}
}
}
Run Code Online (Sandbox Code Playgroud)
控制台中给出的输出是:
尝试
抓住
未处理的异常:System.Exception: A at Mystery.Program.MakeMess() in ...
似乎 CLR 捕获了A并且根本没有调用 finally 块。
但是当我用 try-catch 块包围对 MakeMess() 的调用时:
static void Main(string[] args)
{
try
{
MakeMess();
}
catch(Exception ex)
{
System.Console.WriteLine("Main caught …Run Code Online (Sandbox Code Playgroud) 在调用delete或delete []之前总是省略NULL指针检查是否安全,特别是在编写跨平台代码段时?
我记得几年前(三四个)我编写的相同代码正在使用MS Windows(使用MSVCv12工具链编译)但是使用g ++编译的Linux版本(遗憾的是,我不记得g ++版本)抛出了NULL指针引用.我发现当时可能是编译器错误的信息.
我已经找到了这个SO线程,但在阅读之后我仍然不太确定它是否安全,如果是这样 - 从哪个版本的C++标准?