首页 > 解决方案 > 替代返回指针或引用私有成员

问题描述

我经常看到人们返回指向私有成员的指针或引用,我被告知这是不好的做法(我自己也为此感到内疚)。什么样的糟糕设计决策会导致这种情况,如果有的话,还有哪些安全的替代方案?

标签: c++

解决方案


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

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

返回引用的可行替代方法是返回副本。这对于小物体来说效果很好,但对于较大的物体,它仍然是有问题的。您可以返回一个const明确解释其生命周期的引用,或者返回一个智能指针。


推荐阅读