返回指针或引用私有成员的替代方法

时间:2018-05-06 23:30:42

标签: c++

我经常看到人们返回指针或引用私人成员,我被告知这是不好的做法(我自己也是有罪的)。什么样的糟糕的设计决策导致了这一点,以及有什么安全的替代方案,如果有的话?

1 个答案:

答案 0 :(得分:2)

仅当引用是可变的时,才返回对私有成员的引用是一个坏主意。这提出了一个问题,因为调用者获得了修改对象状态的方法,绕过了您可能已经进行的任何一致性检查。

虽然返回const引用不会让您遇到同样的问题,但它仍然不理想,因为您返回的对象的生命周期由您的对象控制。如果您决定在调用者仍然具有对它的引用时取消分配该成员,则可能会在调用者中导致未定义的行为。

返回引用的可行替代方法是返回副本。这适用于小物体,但对于较大的物体,它仍然存在问题。您可以返回const引用,并清楚地解释其生命周期,或返回智能指针。