C++-Programmierung/ Im Zusammenhang mit Klassen/ mutable und volatile
Bereits in einem vorherigen Kapitel haben Sie konstante Funktionen in Klassen kennen gelernt. Diese können keine Membervariablen der Klasse ändern. Keine? Doch: Membervariablen, die mutable
sind, lassen sich selbst durch konstante Funktionen verändern:
class Foo {
mutable int i1;
int i2;
void Func() {
i1++; i2++; // Erlaubt
}
void constFunc() const {
i1++; // Erlaubt! i1 ist mutable.
i2++; // Fehler: i2 ist nicht mutable, aber Member von Foo. Da constFunc const ist, darf es i2 nicht verändern.
}
};
Sinn und Zweck
[Bearbeiten]Sie werden sich fragen, was mutable
soll, da es immerhin den Sinn einer konstanten Memberfunktion, d.h. die Garantie nichts an der Klasse zu verändern untergräbt. Das stimmt auch.
Es gibt aber durchaus Fälle, wo der Einsatz von mutable
sinnvoll ist. Stellen Sie sich beispielsweise vor, Sie möchten für Debuggingzwecke die Anzahl der Aufrufe einer konstanten Memberfunktion zählen. Dann können Sie mutable
einsetzen und die Funktion gilt weiterhin als konstant.
Generell kann man sagen, dass mutable
nicht eingesetzt werden sollte, wenn die Veränderung dieser Variable das Erscheinungsbild des Objekts von Außen verändert.