我有一个希望相对简单的问题。对于我的类成员变量,它们全部都是私有的,我应该使用访问器返回指针还是返回变量本身?或者我应该做些其他的事情吗?
例如:
unsigned int *Object::GetObjectIDPointer()
{
return &objectID;
}
或者
unsigned int Object::GetObjectID()
{
return objectID;
}
我有一个希望相对简单的问题。对于我的类成员变量,它们全部都是私有的,我应该使用访问器返回指针还是返回变量本身?或者我应该做些其他的事情吗?
例如:
unsigned int *Object::GetObjectIDPointer()
{
return &objectID;
}
或者
unsigned int Object::GetObjectID()
{
return objectID;
}
int
,而不是通过常量引用。 - Sergey Kalinichenko我建议选择第二种解决方案。
更一般地,你可以返回对象本身的副本,编译器很可能会通过复制省略优化来优化掉任何不必要的副本。
你也可以返回字段的const引用:
const MyType& getMyField() const { return this->myField; }
这样做,不会创建任何副本,值也无法被修改(除非使用const_cast
)。
但是对于int类型,我认为你应该返回一个副本,就像你的第二个解决方案一样:
unsigned int Object::GetObjectIDPointer()
{
return objectID;
}
const MyType& m = something.getMyField();
,这可能会导致悬空引用。 - Sebastian Mach如果您只想获取值,则通过值返回。此外,声明函数为const
。但是,如果它很大或复制起来很昂贵,最好返回一个const
引用,以便调用者可以选择不进行复制。
如果您还想修改它,则返回引用(或指针,如果您喜欢),或提供“设置”函数。或者,只需将其公开 - 当它不是封装时,假装它是封装的没有太多意义。
如果您返回引用(或指针),则确保您有一个const
重载,否则您将无法从const
对象中读取值:
const unsigned int *Object::GetObjectIDPointer() const
{
return &objectID;
}
这取决于你的方法。
GetObjectIDPointer()