【问题标题】:Is std::vector X(0) guaranteed not to allocate?std::vector X(0) 是否保证不分配?
【发布时间】:2017-10-15 14:28:34
【问题描述】:

理论上,给定:

std::vector X(0);

那么X会从栈中为自己分配内存,但能保证不分配堆内存吗?

换句话说,由于实现通常会使用一个指向向量的指针,所以这个指针最初总是为0吗?

注意:这与Initial capacity of vector in C++ 不同,因为它在没有参数传递给构造函数时询问容量,而不是在容量为 0 时保证堆分配;在这种情况下容量可以不为零的事实说明了这种差异。

【问题讨论】:

标签: c++ vector language-lawyer allocation


【解决方案1】:

该构造函数调用explicit vector( size_type count ) 这样做:

用计数默认插入的 T 实例构造容器。 没有复制。

您得到的唯一保证是向量将为空,其size() 将为0。允许实现分配任何他们想要的簿记或初始化时的任何内容。

因此,如果您的问题是您是否可以指望 X 占用 0 字节的可用存储空间,那么答案是

【讨论】:

  • 我在实践中遇到的一个值得注意的例外是 MSVC 标准库的调试实现(我假设用于调试信息)。我们在对象的实现中使用了默认构造的向量,这些向量依赖于稍后设置的分配器 - 在它们实际使用之前,因此理论上是安全的 - 但无法直接在构造时找到分配器。
猜你喜欢
  • 2010-10-25
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2020-10-11
相关资源
最近更新 更多