Как уже говорил Матье, то, что вы пытаетесь здесь сделать, имеет мало (если вообще что-то) общего с RAII. Также я сомневаюсь, что любая комбинация const
и mutable
действительно поможет. const
и mutable
изменяют тип и применяются в равной степени к всем доступу к объекту этого типа.
То, что вы, похоже, хотите, чтобы небольшой объем кода имел доступ для записи, а все остальное - только чтение для значения. Учитывая базовый дизайн C ++ (и большинства похожих языков), правильный способ сделать это - переместить переменную в собственный класс с небольшим объемом кода, которому необходим доступ для записи как части (или, возможно, друга). ) этот класс. Остальному миру предоставляется доступ только для чтения через интерфейс класса (т. Е. Функция-член, которая получает значение).
(предположительно урезанный) MyClass
вы опубликовали довольно близко к праву - вам просто нужно использовать это само по себе, а не как часть большого класса с большим количеством других членов. Основные вещи, которые нужно изменить: 1) имя с MyClass
на что-то вроде lazy_int
и 2) (по крайней мере, по моим предпочтениям) get_value()
, вероятно, следует переименовать в operator int()
. Да, m_value
, вероятно, должно быть изменчивым, но это не позволяет другому коду записывать значение просто потому, что другой код вообще не имеет доступа к самому значению.
Затем вы встраиваете объект такого типа в свой больший класс. Код в этом внешнем классе может обрабатывать его как int (только для чтения) благодаря его operator int()
, но не может писать его просто потому, что класс не дает никакого способа сделать это.