Что такое mutable объект
1️⃣ Как кратко ответить
Mutable объект в C++ — это объект, который может изменяться даже в контексте константного метода. Это достигается использованием ключевого слова mutable, которое позволяет изменять члены объекта, объявленные с этим модификатором, даже если сам объект объявлен как const.
2️⃣ Подробное объяснение темы
В C++ ключевое слово mutable используется для того, чтобы разрешить изменение определенных членов объекта, даже если сам объект объявлен как const. Это может быть полезно, когда необходимо изменить состояние объекта, которое не влияет на его логическую константность.
Зачем это нужно
Иногда в программировании возникает необходимость изменять некоторые внутренние данные объекта, которые не влияют на его внешнее поведение или логическую константность. Например, это может быть счетчик вызовов метода или кэширование результатов вычислений. В таких случаях использование mutable позволяет сохранить интерфейс объекта константным, но при этом изменять его внутреннее состояние.
Как это работает
Когда объект объявлен как const, все его методы по умолчанию также считаются константными, и они не могут изменять состояние объекта. Однако, если член объекта объявлен с модификатором mutable, он может быть изменен даже в константных методах.
Пример кода
#include <iostream>
class Example {
public:
Example() : counter(0) {}
// Константный метод, который не должен изменять состояние объекта
void display() const {
// Увеличиваем счетчик вызовов, хотя метод константный
++counter;
std::cout << "Display called " << counter << " times." << std::endl;
}
private:
// Счетчик вызовов метода, который может изменяться
mutable int counter;
};
int main() {
const Example example;
example.display(); // Вывод: Display called 1 times.
example.display(); // Вывод: Display called 2 times.
return 0;
}
Объяснение кода
class Example: Определяет классExampleс одним приватным членомcounterи публичным методомdisplay.Example() : counter(0) {}: Конструктор, инициализирующийcounterнулем.void display() const: Константный метод, который не должен изменять состояние объекта, но увеличиваетcounter.mutable int counter;: Объявлениеcounterс модификаторомmutable, что позволяет изменять его даже в константных методах.const Example example;: Создание константного объектаexample.example.display();: Вызов константного методаdisplay, который увеличиваетcounterи выводит количество вызовов.
Использование mutable позволяет изменять counter в константном методе display, что демонстрирует, как можно управлять внутренним состоянием объекта без нарушения его логической константности.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться