Сделать переменную полу-только для чтения с некоторой точки

Я хочу убедиться, что вектор не изменился после некоторой точки, чтобы я мог безопасно работать с указателями на элементы.

Конечно, я не могу сделать это постоянным или только для чтения после определенного момента, и я не хочу определять другую переменную, которая является const, потому что тогда вектор будет скопирован. Более того, размещение инициализации вектора в функции, которая вызывается в конструкторе (когда переменная будет только для чтения), сделает мой код нелогичным.

Поэтому я надеялся, что будет конструкция «в клетке» по следующим направлениям:

caged<Type> object;
object->change(); // underlying object changed
object.lock();
object->change(); // gives runtime error
const int data = object->getData(); // no problem

Есть ли такая конструкция?

Как еще это можно решить?

0

Решение

Я не хочу определять другую переменную, которая является константой, потому что тогда
вектор будет скопирован

Не копируйте, но переместите ваш вектор в эту переменную.

Повышение времени выполнения при попытке модификации — зло. Проверка модификации во время компиляции — верный путь, и единственный механизм, который есть в C ++, это const,

Инициализация const Переменные с функцией является общим подходом. Фактически, нет большой разницы между инициализацией перемещенным локальным вектором или результатом функции, которая также неявно перемещается. Как правильно сказано @TartanLlama в комментариях, в последнем случае копия может быть (и обычно есть) полностью исключена.

4

Другие решения


По вопросам рекламы [email protected]