<分区>
我预计以下代码会在运行时因空指针错误而崩溃:
#include <memory>
#include <iostream>
#include <cassert>
struct Foo {
void echo() {std::cout << "Echo" << std::endl;}
};
int main()
{
std::unique_ptr<Foo> up(new Foo());
up.reset(nullptr);
assert(up.get() == nullptr);
up.get()->echo();
}
然而 gcc (4.7/4.8/4.9)、msvc(2013 年和即将到来的 2015 年)和 clang (3.5) 都愉快地输出:
Echo
并且 assert 没有触发,所以 up.get()
是 nullptr
。