Digamos que tengo una clase que se ve así (esto es solo un ejemplo):
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; }
};
El const
tanto en el constructor de copia y la doNotChangeMyData
función de hacerlo de modo que ptr
no se puede cambiar; sin embargo, esto todavía me permite modificar el contenido de la matriz a la que apunta ptr
.
¿Hay alguna manera de evitar que el contenido de ptr
la matriz se const
modifique solo en instancias, salvo "tener cuidado" (o cambiar el puntero sin formato)?
Sé que podría hacer algo como
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Pero prefiero no tener que ...
std::vector::operator[]()
puede modificar los valores ¿verdad?
vector
funcionaría.
std::vector::operator[]() const
devuelve una const
referencia
std::vector