从某个时候开始将变量设置为半只读

Make variable semi-readonly from some point on

我想确保矢量在某个时间点后保持不变,以便我可以安全地使用指向元素的指针。

当然我不能在某个点之后将其设为 const 或 readonly 并且我不想定义另一个 const 的变量,因为那样向量将被复制。此外,将向量的初始化放在构造函数中调用的函数中(当变量为只读时)会使我的代码结构不合逻辑。

因此我希望有一个结构 'caged' 如下:

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

有这样的构造吗?

还有什么办法可以解决这个问题?

I don't want to define another variable which is const, because then the vector will get copied

不要复制,而是将您的矢量移动到此变量中。

尝试修改时引发运行时错误是邪恶的。在编译时检查修改是正确的方法,C++ 唯一的机制是 const.

用函数初始化const变量是常用的方法。事实上,使用移动的局部向量或函数的结果初始化之间没有太大区别,后者也被隐式移动。正如@TartanLlama 在评论中正确提到的那样,在后一种情况下,副本可能(通常是)完全被忽略。