想象一个类C,它有一个类型为std :: vector的成员变量m_MyList,我想在其中存储MyClass类型的对象. C有两个函数可以在m_MyList中添加或删除对象.
对于C的消费者,m_MyList也应该是可访问的,因为他们需要读取MyClass对象的集合.集合的外部阅读器无法更改集合,因此MyClass对象仅由C拥有.
对于C的消费者,m_MyList也应该是可访问的,因为他们需要读取MyClass对象的集合.集合的外部阅读器无法更改集合,因此MyClass对象仅由C拥有.
现在我的问题:
在C 11风格中,向量中存储的最佳T是什么?
可能性似乎是:
> std :: vector< MyClass>
> std :: vector< MyClass *>
> std :: vector< unique_ptr< MyClass>>,使用std:move将unique_ptr推入向量
解决方法
如果MyClass对象归C所有,那么最好的选择是最简单的:
std::vector<MyClass>
我在这里看到使用std :: unique_ptrs的唯一原因是你需要保持指向多态的基类的指针.在这种情况下,unique_ptrs用于在向量被破坏时释放资源.但是C接口不应该将所有权转移给客户端.