6

有没有办法使用带有不可复制元素的 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'
}
4

3 回答 3

16

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

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

于 2009-09-17T17:49:08.137 回答
15

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

于 2009-09-17T17:43:27.007 回答
2

另一种选择是使用Boost Pointer Container 库。这很像 std::auto_ptrs 的标准容器,如果可能的话:它保留其元素的独占所有权,并且不能被复制。与标准的 shared_ptrs 容器相比,它的开销也更少。

于 2009-09-18T11:47:05.407 回答