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 consttanto en el constructor de copia y la doNotChangeMyDatafunción de hacerlo de modo que ptrno 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 ptrla matriz se constmodifique 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?
vectorfuncionaría.
std::vector::operator[]() constdevuelve una constreferencia
std::vector