Digamos que eu tenha uma classe parecida com esta (este é apenas um exemplo):
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; }
};
O constconstrutor de cópia e a doNotChangeMyDatafunção fazem com que isso ptrnão possa ser alterado; no entanto, isso ainda me permite modificar o conteúdo da matriz apontada por ptr.
Existe uma maneira de impedir que o conteúdo da ptrmatriz seja alterado constapenas em instâncias, sem "ter cuidado" (ou mudar o ponteiro bruto)?
Eu sei que eu poderia fazer algo como
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Mas eu prefiro não ter que ...
std::vector::operator[]()pode modificar valores certo?
vectorfuncionaria.
std::vector::operator[]() constretorna uma constreferência
std::vector