C++ 中堆对象 getters / setters 的更好实践

Better practice for heap object getters / setters in C++

我目前

Type1 &GetType1() const
{
    return *this->type1;
}

void SetType1(const Type1 &type1)
{
    *this->type1 = type1;
}

并且在 class 定义中

class Type2
{
    public:
        Type2();
        virtual ~Type2();
        Type1 &GetType1() const;
        void SetType1(const Type1 &type1);
    private:
        Type1 *type1 = nullptr;

}

并且在主要部分

 int main()
 { 
       Type2 *type2 = new Type2();
       Type1 *newType1 = new Type1();
       type2->SetType1(*newType1);

       delete type2;
       delete newType1;
  }

在我的项目中无处不在。在我看来,这不是一个非常安全的方法,在某些情况下对象指向 NULL 等。 我想知道是否有更好的普遍接受的方法来做到这一点。也许操作重载是个好主意?

如果您的 class 有一个可以为空的成员指针,那么只需 return 来自 getter 函数的指针,让用户担心极端情况。

Type1* GetType1(){
  return this->type1;
}

void SetType1(Type1* type1) {
  this->type1 = type1;
}

如果万一该成员实际上永远不能变为 null,这是一个 class 不变量,那么我认为 return 一个引用并在其中使用断言是一个很好的做法getter.