![](/img/trans.png)
[英]Should i use std::vector of std::unique_ptr<T[]> if memory is sparse and i'm not going to resize
[英]Should I use std::unique_ptr<T> in a std::vector member variable in my class?
想象一个class C
,它有一个类型为std::vector
的成员变量m_MyList
,我想在其中存储MyClass
类型的对象。 C
有两个函数可以在m_MyList
中添加或删除对象。 对于C
消费者, m_MyList
也应该是可访问的,因为他们需要读取MyClass
对象的集合。 集合的外部阅读器无法更改集合,因此MyClass
对象仅由C
拥有。
现在我的问题是:在C ++ 11风格中,向量中存储的最佳T是什么? 可能性似乎是:
std::vector<MyClass>
std::vector<MyClass*>
std::vector<unique_ptr<MyClass>>
,使用std:move
将unique_ptr
推送到vector
如果MyClass
对象归C
,那么最好的选择是最简单的:
std::vector<MyClass>
我在这里看到使用std::unique_ptrs
的唯一原因是你需要保持指向多态的基类的指针。 在这种情况下,unique_ptrs用于在向量被破坏时释放资源。 但是C
接口不应该将所有权转移给客户端。
如果C拥有对象,则原始指针( std::vector<MyClass*>
)不正确。 其他两个非常相似,具有以下权衡:
std::vector<MyClass>
- 要求MyClass可以复制和/或移动 std::vector<unique_ptr<MyClass>>
- 需要(额外的)动态分配 在容器上执行的操作类型也可能是相关的。 举一个极端的例子,如果MyClass很大并且容器被重复洗牌,那么unique_ptr
将是更好的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.