.
在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;
}
思維導圖筆記: