.
在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;
}
思维导图笔记: