当我初始化一个C++容器(如std :: list)时,复制构造函数是否被调用?

uni*_*n83 3 c++ copy-constructor move-constructor

当我初始化一个STL容器,例如list< vector<char> >使用例如my_list.push_back(vector<char>(5000, 'T')),这是在构造后复制的吗?或者编译器是否在内部调用构造函数list< vector<char> >

K-b*_*llo 7

在C++ 03 push_back中定义为void push_back(const T& x);.这意味着你正在构建一个vector和一个const引用,这样的时间被传递给了list.然后list内部调用复制构造函数以存储此类元素的副本.

在C++ 11中,有一个额外的定义,void push_back(T&& x);它采用对你的时间的右值引用vector,并将导致在内部调用移动构造函数来初始化由list.持有的副本.

  • 那么,换句话说,Microsoft Visual C++ 2010**和**不复制? (2认同)
  • @ unixman83:VC++ 9肯定会导致复制结构. (2认同)