Quantcast
Channel: MSDN Blogs
Viewing all articles
Browse latest Browse all 12366

VS2015新加入的编译选项/Zc:throwingNew

$
0
0
[原文发表地址] New in VS 2015: /Zc:throwingNew [原文发表时间] 2015/08/06 7:05AM C++标准定义了操作符new分配内存失败时不会返回null值, 只会抛出异常. 在近期发布的VS产品的VC++编译器中的操作符new分配内存失败后也是同标准定义一样抛出异。 但是,编译器的这种行为并不是一直是这样的,追溯到VS6.0, 编译器在new操作内存分配失败时却只会返回null值。 操作失败抛出异常标准的行为直到VS2002才开始沿用, 但是较老版本操作失败返回null值的行为仍然保留,可以通过提供的nothrownew.obj机制达到这一目的。 这对现在的编译器有什么影响?从VS2002起, 编译器防止潜在的操作符new会返回空值的情况, 因此,如果你在VS2013写出了下面的代码: void foo() { A* a = new A(); // ... } 理论上编译器会生成这样的代码: void foo() { A* a = malloc(sizeof(A)); if (a) { new(a) A...(read more)

Viewing all articles
Browse latest Browse all 12366

Trending Articles