unique_ptr<list<Struct>>
和list<unique_ptr<Struct>>
之间会有什么区别? list<unique_ptr<Struct>>
会导致元素的内存自动管理吗?
答案 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>>
堆栈上的存储数据都有点小。