Powiedzmy, że mam klasę, która wygląda tak (to tylko przykład):
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; }
};
Zarówno const
w konstruktorze kopiowania, jak i doNotChangeMyData
funkcji sprawiają, że ptr
nie można go zmienić; jednak nadal pozwala mi to modyfikować zawartość tablicy, na którą wskazuje ptr
.
Czy istnieje sposób, aby zapobiec ptr
zmianie zawartości tablicy const
tylko w instancjach, poza „ostrożnością” (lub odejściem od surowego wskaźnika)?
Wiem, że mógłbym zrobić coś takiego
void doNotChangeMyData() const {
const double *const ptr = this->ptr;
ptr[43] = 14; // then this would fail to compile
}
Ale wolałbym nie musieć ...
std::vector::operator[]()
czy mogę modyfikować wartości, prawda?
vector
zadziałałoby.
std::vector::operator[]() const
zwraca const
referencję
std::vector