根据绝对c ++书籍:
vector<AClass> records(20); // vector consctructer uses the // default constructor for AClass to initialize 20 elements.
temp.h
#ifndef TEMP_H
#define TEMP_H
class Temp {
public:
Temp();
static int b;
};
#endif /* TEMP_H */
temp.cpp
#include <iostream>
#include "temp.h"
using namespace std;
int Temp::b=9; // static value for control
Temp::Temp(){
cout<<"Initialize";
++b;
}
的main.cpp
#include <iostream>
#include <vector>
#include "temp.h"
using namespace std;
int main(int argc, char** argv) {
vector<Temp> a(10); // 10 elements
cout<<Temp::b;
return 0;
}
我的结果是:
Initialize10;
正如你所看到的那样,只有一次构造函数被调用。为什么会这样?我很困惑。
答案 0 :(得分:4)
{C} 03和C ++ 11(及更高版本)中vector
构造函数的行为有所不同。
在C ++ 03中,它插入了10个默认构造的Temp
对象的副本:默认构造函数被调用一次,复制构造函数(你没有仪器)被调用10次。
在C ++ 11中,它插入了10个默认构造的Temp
对象。