在C++ primer(第四版)书中的第408页,看到复制构造函数何时调用的情况,其中书中说到初始化容器元素
vector<string> svec(5);
编译器首先使用string默认构造函数创建一个临时值来初始化svec,然后使用复制构造函数将临时值复制到svec的每个元素。
我想验证一下,是不是如书中所说的调用了复制构造函数,但不知道怎么在string的复制构造函数中下断点,于是写了下面的验证程序:
1 class Test 2 { 3 public: 4 Test() 5 { 6 cout << "Test()" << endl; 7 } 8 Test(const Test& rhl) 9 { 10 cout << "Test(const Test&)" << endl; 11 } 12 }; 13 14 int main() 15 { 16 vector<Test> testVector(5); 17 return 0; 18 }
但是运行结果,发现只是调用了5次默认构造函数,不知道问题出在哪,还请各位帮忙看看。
你的复制构造函数没有传参数,所以只会调用默认构造函数。
代码没有错,只是编译器做了优化,原先是在VS2012编译,后来在Linux测试成功了,调用一次默认构造函数,5次复制构造函数