您需要创建一个Proxy类来替代两个方法的返回值。然后,在Proxy类中,您可以适当地处理读取和写入操作。这里的代码应该编译验证这个想法(与无符号整数数组工作):
typedef unsigned int UINT;
类A {
class Proxy {
public:
Proxy(const UINT &number): _number(number) {}
const Proxy &operator=(const Proxy &obj) {
cout << "Writting...\n";
_number = obj._number;
return *this;
}
operator const UINT &() const {
cout << "Reading...\n";
return _number;
}
private:
UINT _number;
};
市民:
A(UINT *array): _array(array) {}
Proxy operator[](int index) {
return _array[index];
}
const Proxy operator[](int index) const {
return _array[index];
}
私人:
UINT *_array;
};
INT主(INT ARGC,字符**的argv){
UINT myArray[] = {0, 1, 2, 3, 4};
A a(myArray); // Normal A object
UINT num1 = a[1]; // Reading fine
a[1] = num1; // Writting fine
const A ca(myArray); // Constant A object
UINT num2 = ca[1]; // Reading fine
ca[1] = num2; // Writting NOT fine (compilation error)
return 0;
}
如果您允许人们保存返回的参考资料并在以后使用,那么您必须在返回参考资料后禁用将来的共享。 – 2011-04-29 14:13:38