vector <X*>*与vector <X>*

use*_*112 1 c++ memory memory-management vector

在什么情况下使用会更好:

vector<X*>* vector = new vector<X>();
Run Code Online (Sandbox Code Playgroud)

代替:

vector<X>* vector = new vector<X>();
Run Code Online (Sandbox Code Playgroud)

什么是优点/缺点?

Mik*_*our 7

动态分配矢量本身几乎没有充分的理由.除非你做一些非常不寻常的事情,否则不要这样做.

在所有对象具有相同类型的常见情况下,您通常需要一个对象向量,vector<X>.

你想要一个指针向量,vector<X*>如果

  • X是一个多态基类; 和
  • 你想X通过向量访问不同子类型的对象; 和
  • 您不需要容器来管理对象的生命周期.

如果您希望容器管理异构对象的生命周期,则存储智能指针,例如std::unique_ptr,或使用类似Boost指针容器库的东西.

正如评论中所提到的,如果对象不能或不应该被移动,你也可以考虑一个指针向量:向量将随着它们的增长移动它们的元素,以维持一个连续的数组.在这种情况下,您还应该考虑使用像deque或的稳定容器list.