Supponiamo che io abbia una classe simile a questa (questo è solo un esempio):
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; }
};
L' const
sia il costruttore di copia e la doNotChangeMyData
funzione di fare in modo che ptr
non può essere modificato; tuttavia, ciò mi consente ancora di modificare il contenuto dell'array indicato da ptr
.
Esiste un modo per impedire che il contenuto ptr
dell'array venga modificato const
solo nelle istanze, a meno di "stare attenti" (o passare dal puntatore non elaborato)?
So che potrei fare qualcosa del genere
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Ma preferirei non dover ...
std::vector::operator[]()
può modificare i valori giusto?
vector
funzionerebbe.
std::vector::operator[]() const
restituisce un const
riferimento
std::vector