首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建不可复制元素的容器

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

Stack Overflow用户
提问于 2009-09-17 17:42:10
回答 3查看 3.3K关注 0票数 6

有没有办法将STL触发器与不可复制的元素一起使用?

如下所示:

代码语言:javascript
复制
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'
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-17 17:49:08

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

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

票数 16
EN

Stack Overflow用户

发布于 2009-09-17 17:43:27

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

票数 15
EN

Stack Overflow用户

发布于 2009-09-18 11:47:05

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1440287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档