1

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

例如:

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

然后

X xl;
int h = xl.P;
4

2 回答 2

1

只需考虑重构以使访问线程安全,这种方式不会很好地工作,并且需要对客户端类/函数进行大量更改。

如果您有保证不会在实例的生命周期内更改的类成员,您可以简单const int P;地在您的类的构造函数中正确地提供和初始化它。

如果该值在类范围内可见,请使用static const int P;

在任何其他情况下,使用公共吸气剂:

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;
}
于 2013-11-14T20:37:20.960 回答
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
};

代价是更大的内存占用。

于 2013-11-14T20:49:21.737 回答