参考代替吸气剂?

时间:2013-11-14 20:08:44

标签: c++

在C ++中使用引用代替getter是一种不好的做法吗?

例如:

class X
{
    int mP;
 public:
    const int& P;
    X():P(mP){}
}; 

以后

X xl;
int h = xl.P;

2 个答案:

答案 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
};

成本是更大的内存占用。