我想确保一个向量在某个点之后不变,这样我就可以安全地使用指向元素的指针。
当然,我不能在某一点之后使它成为常量或只读,而我不想定义是 const的另一个变量,因为这样的向量将被复制。此外,将向量的初始化放在构造函数中调用的函数中(当变量只读取时)会使我的代码不规则地构造。
因此,我希望有一个“笼子”的结构。沿着以下几行:
caged<Type> object;
object->change(); // underlying object changed
object.lock();
object->change(); // gives runtime error
const int data = object->getData(); // no problem
有这样的构造吗?
如何才能解决这个问题?
答案 0 :(得分:4)
我不想定义另一个const变量,因为那样 矢量将被复制
不要复制,而是将矢量移动到此变量中。
在修改尝试时引发运行时错误是邪恶的。在编译时检查修改是正确的方法,C ++唯一的机制是const
。
使用函数初始化const
变量是常用方法。事实上,使用移动的局部向量进行初始化或使用函数的结果之间没有太大区别,这也是隐式移动的。正如@TartanLlama在评论中正确提到的那样,在后一种情况下,副本可能(并且通常是)被完全省略。