检查类方法中是否(this == nullptr)

seg*_*ult 0 c++ null

我想替换这样的代码:

if ((obj != nullptr) && obj->is_valid())
Run Code Online (Sandbox Code Playgroud)

if (obj->is_valid())
Run Code Online (Sandbox Code Playgroud)

哪里

class Obj {
    bool is_valid() {
        if (this == nullptr)
            return false;
        // some more logic ...
    }
    ...
};
Run Code Online (Sandbox Code Playgroud)

显然有两个条件:

  1. obj 始终通过指针访问
  2. Obj::is_valid() 从不虚拟

这是基于以下事实:非虚方法接受this作为其第一个参数,因此

obj->is_valid();
Run Code Online (Sandbox Code Playgroud)

被重写为

Obj::is_valid(obj);
Run Code Online (Sandbox Code Playgroud)

虽然这段代码与gcc-5.4.0一样正常工作,但我的问题是这是否是一个合法的C++代码,将由其他(较旧/较新)的C++编译器正确解释/优化?

YSC*_*YSC 6

别.

if (this == nullptr)
Run Code Online (Sandbox Code Playgroud)

它不会提供任何安全性,因为在空指针上调用成员函数(方法)首先是未定义的行为.这带来了一种没有安全感的安全感,这比没有任何事情更糟糕.