[Effective C++]条款28:避免返回handles指向对象内部成分
.
在C++中,返回指向对象内部成分的引用(handles)可能会导致封装性降低和对象空悬问题。为了避免這些问题,可以通过返回const引用来限制对内部数据的修改,从而确保只读访问
1、返回内部引用对象
- 下面代码中getData函数返回一个指向内部数据的引用,外部代码通过这个引用可以直接修改data数据的内容,破坏了对象封装性
#include <iostream>
#include <vector>
class MyClass {
private:
std::vector<int> data;
public:
MyClass() : data{1, 2, 3, 4, 5} {}
// 返回内部数据的引用
std::vector<int>& getData() {
return data;
}
};
int main() {
MyClass obj;
std::vector<int>& dataRef = obj.getData();
// 修改内部数据
dataRef.push_back(6);
// 打印内部数据
for (int val : obj.getData()) {
std::cout << val << " ";
}
return 0;
}
2、解决:返回const引用
- 返回const引用,外部代码就只能读取数据,而不能修改
#include <iostream>
#include <vector>
class MyClass {
private:
std::vector<int> data;
public:
MyClass() : data{1, 2, 3, 4, 5} {}
// 返回内部数据的const引用
const std::vector<int>& getData() const {
return data;
}
};
int main() {
MyClass obj;
const std::vector<int>& dataRef = obj.getData();
// 尝试修改内部数据(编译错误)
// dataRef.push_back(6); // 错误:不能修改const对象
// 打印内部数据
for (int val : obj.getData()) {
std::cout << val << " ";
}
return 0;
}
思维导图笔记:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/120035.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!