C++ 访问器 - 我应该返回指向成员变量或实际成员变量本身的指针
C++ Accessors - should I return a pointer to the member variable or the actual member variable itself?
我希望这里有一个简单的问题。 对于我的类的成员变量,所有这些都是私有的,我应该使用访问器返回指针还是返回变量本身? 还是我应该做点别的事情?
例:
unsigned int *Object::GetObjectIDPointer()
{
return &objectID;
}
或
unsigned int Object::GetObjectID()
{
return objectID;
}
这在很大程度上取决于你想用它们做什么:如果你计划你的类的用户能够修改你的类中的变量(一个可怕的和强烈不鼓励的事情),你可以返回指针或引用;否则,返回变量本身。
当您要返回的对象很大时,此规则有一个例外,例如向量、集合、映射等。如果您决定对它们进行访问,则应通过常量引用返回它们。
我会
说,采取第二种解决方案。
更一般地说,您可以返回对象本身的副本,编译器可能会通过复制 elision 优化来优化任何不必要的副本。
您还可以返回对该字段的 const 引用:
const MyType& getMyField() const { return this->myField; }
这样,就不会创建任何副本,并且无法修改值(const_cast
除外)。
但是对于 int,我认为您应该返回一份副本,就像您的第二个解决方案一样:
unsigned int Object::GetObjectIDPointer()
{
return objectID;
}
如果您只想能够获取值,则按值返回。此外,声明函数const
。但是,如果复制它很大或成本很高,则最好返回const
引用,以便调用方可以选择不复制它。
还希望能够修改它,那么要么返回一个引用(或者一个指针,如果你愿意),或者提供一个"set"函数。或者,只是将其公开 - 假装它被封装而没有多大意义。
如果确实返回了引用(或指针),请确保具有const
重载,否则将无法从const
对象中读取值:
const unsigned int *Object::GetObjectIDPointer() const
{
return &objectID;
}
这取决于
你的方法
GetObjectIDPointer()
如果是私有方法,请使用指针,因为它将使您的成员快速访问。 但如果该方法是公共的,则应始终返回副本。就像你返回一个指针一样,它会违反OOPS(数据隐藏)的基本原则。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组