【发布时间】:2015-08-12 09:18:10
【问题描述】:
我想确保向量在某个时间点后保持不变,以便我可以安全地使用指向元素的指针。
当然,我不能在某个点之后将其设为 const 或 readonly,并且我不想定义另一个 is const 的变量,因为这样向量将被复制。此外,将向量的初始化放在构造函数中调用的函数中(当变量为只读时)会使我的代码结构不合逻辑。
因此,我希望有一个“笼中”的构造,如下所示:
caged<Type> object;
object->change(); // underlying object changed
object.lock();
object->change(); // gives runtime error
const int data = object->getData(); // no problem
有这样的构造吗?
还有什么办法可以解决这个问题?
【问题讨论】:
-
我没有看到从函数创建
const vector的不合逻辑部分... -
您可以创建一个 const 别名(一个 const 引用)来避免复制,但这并不妨碍使用 original 向量:-/
-
你干脆不将它传递给任何可以修改它的函数怎么样?更明确地说,只将其传递给
const&或const*函数。 -
我也不明白为什么在构造函数中实例化一个常量(通过一个专用函数)是不合逻辑的。据我了解,这正是您所要求的逻辑。
-
@Jarod42 不合逻辑的部分不是在函数中创建 const 向量,而是在构造函数中调用函数。首先调用一些修改对象的函数,然后我想冻结对象。我不能将所有这些函数都放入构造函数中;它们在对象创建后被调用。