Я хочу убедиться, что вектор не изменился после некоторой точки, чтобы я мог безопасно работать с указателями на элементы.
Конечно, я не могу сделать это постоянным или только для чтения после определенного момента, и я не хочу определять другую переменную, которая является const, потому что тогда вектор будет скопирован. Более того, размещение инициализации вектора в функции, которая вызывается в конструкторе (когда переменная будет только для чтения), сделает мой код нелогичным.
Поэтому я надеялся, что будет конструкция «в клетке» по следующим направлениям:
caged<Type> object;
object->change(); // underlying object changed
object.lock();
object->change(); // gives runtime error
const int data = object->getData(); // no problem
Есть ли такая конструкция?
Как еще это можно решить?
Я не хочу определять другую переменную, которая является константой, потому что тогда
вектор будет скопирован
Не копируйте, но переместите ваш вектор в эту переменную.
Повышение времени выполнения при попытке модификации — зло. Проверка модификации во время компиляции — верный путь, и единственный механизм, который есть в C ++, это const
,
Инициализация const
Переменные с функцией является общим подходом. Фактически, нет большой разницы между инициализацией перемещенным локальным вектором или результатом функции, которая также неявно перемещается. Как правильно сказано @TartanLlama в комментариях, в последнем случае копия может быть (и обычно есть) полностью исключена.