【发布时间】:2014-11-24 00:00:46
【问题描述】:
我希望以下代码在运行时崩溃并出现空指针错误:
#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
并且断言没有触发,所以up.get() 是nullptr。
【问题讨论】:
-
UB 就是 UB,你不应该期待什么。
-
如何在 nullptr 上调用方法?
-
终于又找到了副本。
-
@Deduplicator 干得好 :)
-
顺便说一句:
unique_ptr是您问题中的红线。
标签: c++ memory-management unique-ptr