如何创建不可复制元素的容器

时间:2009-09-17 17:42:10

标签: c++ stl containers noncopyable

有没有办法使用带有不可复制元素的STL容器?

类似的东西:

class noncopyable
{
    noncopyable(noncopyable&);
    const noncopyable& operator=(noncopyable&);
public:
    noncopyable(){};
};

int main()
{
    list<noncopyable> MyList; //error C2248: 'noncopyable::noncopyable' : cannot access private member declared in class 'noncopyable'
}

3 个答案:

答案 0 :(得分:16)

不,不可复制的元素不能在C ++容器类中。

根据标准23.1第3段,“存储在这些组件中的对象类型必须符合CopyConstructible类型(20.1.3)的要求,以及Assignable类型的附加要求。 “

答案 1 :(得分:15)

一个选项是创建指向元素的指针列表(最好是shared_ptr)。这不是你想要的,但它会完成工作。

答案 2 :(得分:2)

另一种选择是使用Boost Pointer Container library。这很像std :: auto_ptrs的标准容器,可能是这样的:它保留了其元素的独占所有权,并且无​​法复制。它的开销也比shared_ptrs的标准容器少。