尊重恒定性,同时避免在堆上重新分配
On respecting constness while avoiding reallocating on the heap
我扩展了一个常量函数,每次调用这个常量函数时,我都必须创建一个映射。 如在
int foo() const {
map<int, int> bar;
// setup bar
...
return utility::eval(bar);
}
但是声明酒吧非常昂贵。 我可以通过声明 bar 是一个实例变量来将 CPU 占用空间减少一半,但这样做并不尊重常量。 有没有一种非黑客方法可以两全其美?
是的。
class Foo {
mutable map<int, int> bar;
...
}
另请参阅 http://www.highprogrammer.com/alan/rants/mutable.html 和三重检查,在此处实际使用mutable
是否有意义。
您可以将其定义为mutable
成员变量。
但是,您不应该将mutable
用作一种笨拙的解决方法,以应对您已经将自己设计成一个角落的情况。 只有在修改变量不会更改类的逻辑状态(即它对成员函数产生的结果没有可观察到的影响)的情况下,才应使用它。 你的听起来像这样的情况,所以应该没问题。
相关文章:
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 为模板参数类型中的新对象分配内存
- 新运算符分配的大小大于声明的大小.为什么
- 在C++中分配分配
- 为什么支撑初始化分配分配填充垃圾变量
- C 新操作员分配新内存
- 新不分配内存?
- 如果我的C++“新”内存分配失败,如何找出返回值
- 我可以用新的分配内存块吗?
- COM / DCOM:服务器存根不会为现有接口中的新方法分配内存
- 在线程在 C++ 中完成后将新任务分配给线程
- 只能使用CUDA中的新运算符分配有限的内存
- 与将新内容分配给向量的指针斗争
- 确定C++中新运算符分配的内存大小
- 按新内存分配
- 是否有必要使用 'new' 将新指针分配给与指向同一结构的先前存在的指针相同的结构?如果是这样,为什么?
- 用于新运算符分配的公共内存
- boost::io_service post方法是否引起新的分配?
- 如何在C++中检索由新运算符分配的对象的地址