【发布时间】:2019-08-15 19:24:33
【问题描述】:
我想知道如何对占用大量内存的成员变量使用 getter 和 setter。通常我会这样做:
class A
{
private:
BigObject object;
public:
BigObject getObject() const
{
return object;
}
void setObject(const BigObject& object)
{
this->object = object;
}
};
但是,我相信这个 getter 和 setter 会复制我不想要的 BigObject。有没有更好的方法来做到这一点?
我想过这样做,但我在互联网上读到这不是一个好主意,因为如果使用不当会导致分段错误:
BigObject& getObject()
{
return object
}
【问题讨论】:
-
如果不制作副本,setter 将如何工作?
-
你在互联网上哪里读到它会导致段错误?通过引用返回一个类成员通常是这样做的,所以这个建议非常令人惊讶。
-
getter 和 setter 打破封装,暴露对象的内部类型。我宁愿在类上实现一个动作方法,而不是让某人获得内部状态并将其放回去。
-
if used badly任何事情都可能导致段错误。 -
为什么使用(或修改或 'foos' 或 'bars' ...)A::object 数据的代码不在 A 中?该功能如何不是封装目标的一部分?请参阅有关“告诉,不要问”的文章。恕我直言,getter 和 setter 浪费了您(和我们)的时间。
标签: c++ getter-setter