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

时间:2014-10-01 11:08:55

标签: c++ arrays pointers

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

std::array<A, 10>

而不是指针数组:

std::array<A*, 10>

2 个答案:

答案 0 :(得分:8)

以下是重要的区别:

对象数组:

  • 对象的内存由std::array管理。
  • 对象存储在连续的内存中(良好的缓存效率)
  • 所有对象属于同一类型
  • 所有对象都存在
  • 分配元素会制作对象的副本

指针数组:

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

这些内容中的任何一个是专家还是骗子取决于您的使用案例。

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

答案 1 :(得分:0)

如果您不想使用STL数组,可以使用自己的数组

1)数组[10]

2)A *数组[10]

对于#1,A类必须有一个默认构造函数。

    A needs more memory to hold object

    Whenever you assigned an object to any index of the array, copy constructor gets called

    Compilation time required is more

对于#2不需要构造函数

   sizeof(array) = size of pointer * 10

   compilation time required is less

   There is no need of default constructor or copy constructor