今天看到一段奇怪的代码,它的主要流程是这样的:
void set(){ Test* p = nullptr; Test *a = new Test; *p = a; std::cout << p->getMember() << "n";}第一感觉这代码肯定是有问题的,应该是编译不过至少应该会有warning,但事实证明这段代码可以编译通过,而且也没有warning。(虽然这段代码确实是错误的)
类Test的定义大致如下:
class Test { public: Test():member(0){}; Test(const Test* c) : member(c->member){}; int getMember() const { return member; } private: int member;};*t=a这行代码相当于调用构造函数Test(const Test *t),所以这段代码可以编译通过。 但是运行的话会产生未定义的行为(undefined behavior)。
看来这种情况只能靠经验了。
千万不要解引用空指针,千万不要解引用空指针,千万不要解引用空指针。
转载于:https://my.oschina.net/u/1986432/blog/891948