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

时间:2018-10-01 08:30:30

标签: c++ null

我想替换这样的代码:

if ((obj != nullptr) && obj->is_valid())

使用

if (obj->is_valid())

其中

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

显然有两个条件:

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

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

obj->is_valid();

被改写为

Obj::is_valid(obj);

虽然此代码可以在gcc-5.4.0上正常工作,但我的问题是这是否是合法的C ++代码,可以被其他(较旧/较新的)C ++编译器正确解释/优化?

1 个答案:

答案 0 :(得分:6)

不要。

if (this == nullptr)

首先,它不会像calling a member function (method) on a null pointer is undefined behavior那样提供任何安全性。没有安全,这会带来安全感,这比没有要糟。