【问题标题】:vector emplace_back confusion [duplicate]矢量emplace_back混淆[重复]
【发布时间】:2014-06-03 21:42:02
【问题描述】:

我对这段代码 sn-p 的输出感到好奇。

#include <vector>
#include <iostream>

struct base
{
  static int id;
  base() {std::cout << "C" << std::endl; mid = id; id++;}
  //base(const base&) {std::cout << "Co" << std::endl;}
  //base(base &&) {std::cout << "Mo" << std::endl;}
  ~base() {std::cout << "D" << mid << std::endl;}
  int mid;
};

int base::id = 0;

int main()
{
  std::vector<base> v;
  v.emplace_back();
  std::cout << "First" << std::endl;
  v.emplace_back();
  std::cout << "Second" << std::endl;
}

g++ 4.7.2 显示输出

C
First
C
D0
Second
D0
D1

我不明白为什么在第二个“C”之后看到“D0”。另外,为什么“D0”在输出中出现了两次?

这种行为是否符合 C++11 标准,还是与“实施质量”相关的方面?

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    vector 在您添加对象时调整大小。 reserve开头有足够的空间,你会看到你期望的输出。

    std::vector<base> v;
    v.reserve(2);        // now there's enough capacity to contain at least 2 objects
    v.emplace_back();
    std::cout << "First" << std::endl;
    v.emplace_back();
    std::cout << "Second" << std::endl;
    

    输出:

    C
    First
    C
    Second
    D0
    D1
    

    Live demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-23
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      相关资源
      最近更新 更多