使用 getter 访问成员变量C++

Accessing member variables with getters C++

本文关键字:变量 C++ 成员 访问 getter 使用      更新时间:2023-10-16

如果我的头文件中有这个场景的私人地图

std::map<std::string, Scene> scenes;

我的公众getter应该这样吗?

std::map<std::string, Scene>* getScenes() { return &scenes; }

仍然在思考 c++ 中的指针,所以如果这看起来像一个愚蠢的问题,请道歉

考虑到您可以通过引用返回,使用指针很少是一个好主意。

std::map<std::string, Scene>& getScenes() { return scenes; }

然而,这也不是很好,并且违背了使成员变量私有的目的,返回指向它的指针也是如此。

要访问成员变量以查看数据而不更改它,这为拥有私有成员变量的 getter 提供了一些意义,您应该返回一个 const 引用:

const std::map<std::string, Scene>& getScenes() const { return scenes; }

我只想补充一点,有些人认为getter和setter只是杂乱无章,如果需要的话,你应该继续公开成员变量。

其他人则认为应该节俭地使用它。

其他人仍然认为他们被利用,但只是因为他们是两害相权取其轻。

除非需要,否则返回指向未存储为指针的成员的指针不是一个好主意。传递指针可能会变得混乱,例如,如果原始对象超出范围,您最终会得到一个悬空的指针。通过 const 引用返回应该是您的第一个停靠港:

const std::map<std::string, Scene>& getScenes() const { return scenes; }

这将避免复制,同时保持常量的正确性。这显然不是一种一刀切的方法,但通常情况下,如果你想要一个非基元类型的 getter,你会希望通过 const 引用返回。