假设我有:
class A {
public:
const int x;
A() : x(3) {}
}
我想创建
std::vector<A>
g ++抱怨默认赋值运算符不起作用,因为它尝试执行this->x = x
,由于x
是const,因此无法完成。
有没有办法解决这个问题?
答案 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
进入标准容器,这样可以提高效率并允许您将不可复制的对象放入标准容器中。