将具有const字段的对象插入到容器中

时间:2011-12-14 20:14:48

标签: c++ std assignment-operator

假设我有:

class A {
public:
    const int x;
    A() : x(3) {}
}

我想创建

std::vector<A>

g ++抱怨默认赋值运算符不起作用,因为它尝试执行this->x = x,由于x是const,因此无法完成。 有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:5)

  

g ++抱怨默认赋值运算符不起作用   试图这样做 - > x = x,由于x是const,所以无法完成。

g ++正确抱怨。您的类不满足标准容器的可复制要求,这就是您无法使用它们的原因。

  

有什么方法吗?

当然有。甚至不止一种方式。

E.g。最明显的事情是:您可以从成员中删除const限定符以使类可复制。

或者你可以将指针(或智能指针)存储到容器而不是对象(一种特定的方法就是tpg2114建议的那样)。

答案 1 :(得分:1)

您是否尝试过使用boost :: ptr_vector之类的东西?您将存储指向对象而不是对象的指针,但这会解决分配问题。

http://www.boost.org/doc/libs/1_48_0/libs/ptr_container/doc/ptr_vector.html

答案 2 :(得分:1)

我认为这个故事的寓意是你希望你的对象是可分配的副本,不要通过使用const或&amp;来使其不可复制。成员或非公开副本分配操作员。

修改

供参考:使用C ++ 11,您可以emplace进入标准容器,这样可以提高效率并允许您将不可复制的对象放入标准容器中。