在c++中像python中一样使用nullptr作为None是一个好习惯吗

uqjltbpv  于 2022-12-30  发布在  Python
关注(0)|答案(1)|浏览(153)

我正在用c++编写一个程序,但我不确定这种方法是否正确。

class A {
  private:
    unsigned *a;

    bool checkA() {
      return a != nullptr;
    }

  public:
    A() {
      this->a = nullptr;
    }

    void setA(unsigned a) {
      this->a = new unsigned(a);
    }
}

成员变量'a'只能由'setA'设置,但是在其他方法中,我必须检查'a'是否已设置。因此我使用nullptr检查它是否已设置。
这段代码是一个好的实践吗?
我试着将“a”的数据类型改为int,并将其设置为-1,以注意未初始化的值。然而,我认为有更好的方法来做到这一点。
请给予我一些建议。

lqfhib0f

lqfhib0f1#

如果您确实需要,可以使用std::optional<int>
但是setA本身是一个反模式,只需在构造函数中设置值,RAII是您的朋友,而不是要主动避免的东西。
如果a始终存在,则要比A有状态(有时有a,有时没有)更容易推断代码。

相关问题