将具有const字段的对象插入到容器中
inserting an object that has const fields into a container
假设我有:
class A {
public:
const int x;
A() : x(3) {}
}
我想创建
std::vector<A>
g++抱怨默认赋值操作符不能工作,因为它试图做this->x = x
,而x
是const,所以不能做。还有别的办法吗?
g++抱怨默认赋值操作符不能工作,因为它尝试这样做->x = x,这不能做,因为x是const。
g++正确报错。你的类不满足标准容器的copyable要求,这就是为什么你不能与它们一起使用。
有别的办法吗?
当然有。甚至不止一种方式
。最明显的是:你可以从成员中删除const
限定符,使类可复制。
或者,您可以将指针(或智能指针)存储到容器中,而不是存储到对象中(tpg2114建议的一种具体方法)。
您是否尝试过使用boost::ptr_vector之类的东西?您将存储指向对象的指针而不是对象本身,但这可以解决赋值问题。
http://www.boost.org/doc/libs/1_48_0/libs/ptr_container/doc/ptr_vector.html我认为这个故事的寓意是如果你想让你的对象具有可复制可分配性不要通过使用const或&成员或非公共复制赋值操作符。
编辑:参考:使用c++ 11,您可以将emplace
放入标准容器中,这既更有效,又允许您将不可复制的对象放入标准容器中。
相关文章:
- 将包含不可复制对象的对插入到映射中
- 在 std::map 中插入对象时构造函数中变量的地址
- 在 c++ 列表中插入对象
- 在列表C 中插入对象
- 如何创建插入对象使用duktape
- 如何在地图中插入对象以保持其排序
- bad_alloc通过右值和对象有效性插入对象时
- 插入对象以设置c++
- 在地图中插入对象而不复制对象
- C++:使用递归在二叉搜索树中插入对象
- 如何在矢量中高效、正确地插入对象
- vector插入对象的副本或引用
- 我可以插入对象到tr1 unordered_map
- 在ostreams中插入对象
- 如何在指针数组中插入对象
- 在链表中按升序插入对象
- 标记分派结构不能插入对象类型
- 链表-插入对象
- 在vector的下标处插入对象
- 按字母顺序向vector插入对象