Angenommen, ich habe eine Klasse, die so aussieht (dies ist nur ein Beispiel):
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; }
};
Die constsowohl im Kopierkonstruktor als auch in der doNotChangeMyDataFunktion machen es so, dass ptres nicht geändert werden kann; Auf diese Weise kann ich jedoch weiterhin den Inhalt des Arrays ändern, auf das von verwiesen wird ptr.
Gibt es eine Möglichkeit zu verhindern, dass der Inhalt des ptrArrays nur in constInstanzen geändert wird , ohne "vorsichtig" zu sein (oder sich vom Rohzeiger zu entfernen)?
Ich weiß, ich könnte so etwas tun
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Aber ich möchte lieber nicht ...
std::vector::operator[]()kann Werte richtig ändern?
vectorwürde funktionieren.
std::vector::operator[]() constgibt eine constReferenz zurück
std::vector