在C ++中使用引用代替getter是一种不好的做法吗?
例如:
class X
{
int mP;
public:
const int& P;
X():P(mP){}
};
以后
X xl;
int h = xl.P;
答案 0 :(得分:1)
考虑重构以使访问线程安全,这样就不能很好地工作,并且需要在客户端类/函数中进行大量更改。
如果您有类成员,保证在实例的生命周期内不会更改,您只需提供const int P;
并在类的构造函数中正确初始化。
如果要在类范围内显示该值,请使用static const int P;
在任何其他情况下使用公共getter:
int P() const; // a return type of 'const int &' would be redundant
第一次实施:
int X::P() const
{
return mP;
}
线程安全实现:
class X {
{
// ...
private:
// ...
mutable std::mutex internalDataGuard;
};
int X::P() const
{
std::lock(internalDataGuard);
return mP;
}
答案 1 :(得分:0)
这一切都不好:
class X { public: int x; };
class X {
private: int m_x;
public: const int& get() const { return m_x; }
public: void set(const int& other) { m_x = other; }
};
class X {
private: int m_x;
public: const int& x() const { return m_x; }
public: void x(const int& other) { m_x = other; }
};
class X {
private: int m_x;
public: const int& x() const { return m_x; }
public: int& x() { return m_x; }
};
选择一个,这是一个设计决定。
拥有'const int& x'发布私有成员将起作用:
class X {
private: int m_x;
public: const int& x;
public: X() : m_x(0), x(m_x) {}
// Take care for copy and assignment
};
成本是更大的内存占用。