繁体   English   中英

我应该使用std :: unique_ptr <T> 在我班级的std :: vector成员变量中?

[英]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:moveunique_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM