Unique_ptr容器或unique_ptr元素

Unique_ptr containers or unique_ptr elements

本文关键字:ptr unique 元素 Unique      更新时间:2023-10-16

unique_ptr<list<Struct>>list<unique_ptr<Struct>>有什么区别?list<unique_ptr<Struct>>是否也会导致元素的内存也被自动管理?

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

unique_ptr<list<Struct>>list<unique_ptr<Struct>>的区别与list<Struct>*list<Struct*>的区别完全相同。也就是说,一个是指向Struct list的指针,另一个是指向Struct的指针list。这是一个相当明显的重大区别。

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

通过逻辑扩展,list<unique_ptr<Struct>>中的节点持有一个unique_ptr<Struct>,它指向已单独分配的结构。相反,unique_ptr<list<Struct>>是指向节点直接持有Struct s 的list的指针。

list内容的管理不会,也不能由包装它的指针处理。这是在何处执行管理的混淆:list直接管理其内容(列表(,unique_ptr直接管理其内容(原始指针(,没有其他内容。

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

两者都将数据存储在堆上,unique_ptr<list<Struct>>堆栈上的存储量略小。