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.
我目前
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.