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

Var*_*gas 6 c++ containers stl 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'
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ley 16

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

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


Jar*_*Par 15

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

  • +1,或多或少唯一的选择,因为IIRC`std :: list`要求元素是可复制构造的. (2认同)