c++ - 替代返回指针或引用私有成员
问题描述
我经常看到人们返回指向私有成员的指针或引用,我被告知这是不好的做法(我自己也为此感到内疚)。什么样的糟糕设计决策会导致这种情况,如果有的话,还有哪些安全的替代方案?
解决方案
仅当引用是可变的时,才返回对私有成员的引用不是一个好主意。这带来了一个问题,因为调用者获得了修改对象状态的方法,绕过了您可能已经进行的任何一致性检查。
尽管返回const
引用不会让您遇到同样的问题,但仍然不理想,因为您返回的对象的生命周期是由您的对象控制的。如果您决定在调用者仍然引用该成员时取消分配该成员,则可能会导致调用者出现未定义的行为。
返回引用的可行替代方法是返回副本。这对于小物体来说效果很好,但对于较大的物体,它仍然是有问题的。您可以返回一个const
明确解释其生命周期的引用,或者返回一个智能指针。
推荐阅读
- ios - Apple iOS 生产证书 - [ KeyChain Group ]
- android - Kotlin onClick 清除字段
- javascript - 如何在 Java 或 Javascript 中持续接收 docker stats
- wordpress - wordpress 中的帖子需要密码保护
- vue.js - Nuxt - 运行“npm run generate”时更改 JavaScripts 文件的位置
- list - 带有 NavigationLink 的 SwiftUI 列表如何在点击时进行自定义突出显示
- python - 如何创建多列索引数据框以及如何为每组值绘制图表
- reactjs - 如何从 React Native 中“从现在开始”的自定义日期和时间获取几周/几天/几小时/几分钟前?
- mysql - Mysql按列分组并最好在另一列值上获取最大ID
- javascript - 无法在流程中同时获得部分应用程序和异步播放