从某个时候开始将变量设置为半只读
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 在评论中正确提到的那样,在后一种情况下,副本可能(通常是)完全被忽略。
我想确保矢量在某个时间点后保持不变,以便我可以安全地使用指向元素的指针。
当然我不能在某个点之后将其设为 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 在评论中正确提到的那样,在后一种情况下,副本可能(通常是)完全被忽略。