Katakanlah saya memiliki kelas yang terlihat seperti ini (ini hanya sebuah contoh):
class A {
double *ptr;
public:
A() : ptr( new double[100] ) {}
A( const A &other ) {
other.ptr[7] = 15;
}
void doNotChangeMyData() const {
ptr[43] = 14;
}
void changeMyData() {
ptr[43] = 14;
}
~A() { delete[] ptr; }
};
The const
baik konstruktor copy dan doNotChangeMyData
fungsi membuatnya sehingga ptr
tidak dapat diubah; namun, ini masih memungkinkan saya untuk memodifikasi isi array yang ditunjuk oleh ptr
.
Apakah ada cara untuk mencegah agar isi ptr
array tidak diubah const
hanya dalam keadaan, kurang "hati-hati" (atau berganti dari pointer mentah)?
Saya tahu saya bisa melakukan sesuatu seperti
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Tapi saya lebih suka tidak harus ...
std::vector::operator[]()
dapat mengubah nilai, kan?
vector
akan berhasil.
std::vector::operator[]() const
mengembalikan const
referensi
std::vector