Disons que j'ai une classe qui ressemble à ceci (ce n'est qu'un exemple):
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; }
};
Le const
constructeur de copie et la doNotChangeMyData
fonction le rendent ptr
impossible à modifier; cependant, cela me permet toujours de modifier le contenu du tableau pointé par ptr
.
Existe-t-il un moyen d'empêcher le contenu du ptr
tableau de d'être modifié dans les const
instances uniquement, à moins de "faire attention" (ou de s'éloigner du pointeur brut)?
Je sais que je pourrais faire quelque chose comme
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Mais je préfère ne pas avoir à ...
std::vector::operator[]()
peut modifier les valeurs à droite?
vector
marcherait.
std::vector::operator[]() const
renvoie une const
référence
std::vector