有没有办法使用带有不可复制元素的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'
}
答案 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的标准容器少。