C++,对象数组VS指向那些对象的指针数组

Rom*_*ain 0 c++ arrays pointers

考虑一个名为A的c ++类.使用对象数组的优缺点是什么:

std::array<A, 10>
Run Code Online (Sandbox Code Playgroud)

而不是一个指针数组:

std::array<A*, 10>
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 7

以下是重要的区别:

对象数组:

  • 对象的内存由管理std::array.
  • 对象存储在连续的内存中(良好的缓存效率)
  • 所有对象都是相同类型的
  • 存在所有对象
  • 分配元素会生成对象的副本

指针数组:

  • 指向的对象的内存不由std::array包含指针的对象管理.
  • 您可以存储指向多态类型的公共基础的指针
  • 指针可以nullptr有价值,即不指向任何对象
  • 分配元素不会生成指向的对象的副本

这些东西中的任何一个是pro还是con,取决于您的用例.

现在对于基于意见的部分,作为初学者的提示:在我看来,内存由数组管理的事实清楚地表明数组"拥有"对象.通常不清楚谁拥有指针所指向的对象.所有权的清晰度,以及始终是奖金的缓存效率,使得对象数组在您不确定时是一个很好的默认选择.尽可能在数组中使用对象,在需要时使用指针.当你需要指针时,考虑是否std::unique_ptr合适.