Unique_ptr容器或unique_ptr元素

时间:2015-02-24 02:55:40

标签: c++ c++11 smart-pointers unique-ptr

unique_ptr<list<Struct>>list<unique_ptr<Struct>>之间会有什么区别? list<unique_ptr<Struct>>会导致元素的内存自动管理吗?

2 个答案:

答案 0 :(得分:2)

unique_ptr<>就像说*,但还有自动删除的好处。

unique_ptr<list<Struct>>list<unique_ptr<Struct>>之间的差异与list<Struct>*list<Struct*>之间的差异完全相同。也就是说,一个是指向list Struct的指针,另一个是指向list的{​​{1}}指针。这显然是一个很大的区别。

Struct类型管理自己的内容,因为它为列出list中放置内容的列表节点分配内存。因此<>中的节点直接包含Struct对象。但是list<Struct>中的节点只保存指向结构的指针。

通过逻辑扩展,list<Struct*>中的节点包含list<unique_ptr<Struct>>,它指向已单独分配的Struct。相反,unique_ptr<Struct>是指向unique_ptr<list<Struct>>的指针,其节点直接保留list s。

Struct的内容管理没有,不能由包装它的指针处理。这是对管理执行位置的混淆:list直接管理其内容 - 列表 - 并且list直接管理其内容 - 原始指针,而不管其他任何内容。

答案 1 :(得分:1)

  • 明显不同的是,您必须在构造点定义list<unique_ptr<Struct>>,而在构建unique_ptr<list<Struct>>时,它可以只是nullptr
  • list<unique_ptr<Struct>>存储所有指针的开销可以忽略不计
  • unique_ptr<list<Struct>>在获取任何成员时会产生开销

堆上的存储数据和unique_ptr<list<Struct>>堆栈上的存储数据都有点小。