low*_*der 6 c++ stl smart-pointers c++11 visual-c++-2012
想象一下class C,有一个m_MyList类型的成员变量std::vector,我想在其中存储类型的对象MyClass.C有两个函数可以添加或删除对象m_MyList.
m_MyList也应该让消费者可以访问,C因为他们需要阅读MyClass对象集合.集合的外部阅读器无法更改集合,因此MyClass对象仅由C.
现在我的问题是:在C++ 11风格中,向量中存储的最佳T是什么?可能性似乎是:
std::vector<MyClass>std::vector<MyClass*>std::vector<unique_ptr<MyClass>>使用std:move推unique_ptr入vectorjua*_*nza 13
如果MyClass对象是拥有的C,那么最好的选择是最简单的:
std::vector<MyClass>
Run Code Online (Sandbox Code Playgroud)
我std::unique_ptrs在这里使用的唯一原因是你需要保持指向多态的基类的指针.在这种情况下,unique_ptrs用于在向量被破坏时释放资源.但是C接口不应该将所有权转移给客户端.
Jam*_*kin 12
std::vector<MyClass*>如果C拥有对象,则原始指针()不正确.其他两个非常相似,具有以下权衡:
std::vector<MyClass> - 要求MyClass可以复制和/或移动std::vector<unique_ptr<MyClass>> - 需要(额外)动态分配在容器上执行的操作类型也可能是相关的.举一个极端的例子,如果MyClass很大并且容器被重复洗牌,那unique_ptr将是更好的选择.