【问题标题】:Declaring an Array of Objects: instantiates them声明一个对象数组:实例化它们
【发布时间】:2012-04-26 21:58:48
【问题描述】:

为什么 C++ 以这样的方式创建,如果你有一个类 A 并且你声明了一个类型为 A 的数组,那么整个数组就会被用该类的默认构造函数实例化的对象填充?

【问题讨论】:

  • 鼓励您使用std::vector ;)
  • 为了扭转这个问题,有什么替代方案?如果声明一个对象数组没有实例化它们,那么你将如何手动实例化它们?你需要使用placement new来做吗?看起来这不是很容易出错吗?鉴于需要在使用对象之前对其进行实例化,那么自动执行它对我来说似乎是最好的解决方案。如上所述,如果您更愿意根据需要执行此操作,请使用类似矢量的容器而不是静态数组。

标签: c++ arrays oop


【解决方案1】:

因为当您创建给定大小的数组时,数组的每个元素必须在创建后立即有效。

如果您想要不同的行为,您可以使用vectorpush_back。一个向量被创建为空;当你想添加一个新元素时,push_back 将获取一个以你想要的方式创建的对象,并在向量中复制它。

【讨论】:

  • 您可以使用vector::reserve 来保留容量,而无需构建任何东西。
  • 当然,您没有来创建一个空的向量——如果需要,您可以将初始大小传递给构造函数。
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2015-03-17
  • 2013-04-21
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多