vs.push_back(String("Three")); 为什么用了三次拷贝构造函数

img

只可以理解 第一次使用String(char*)构造函数,和一次拷贝到vector vs中调用的一次拷贝构造函数String(String&)。不懂为什么会用到三次拷贝构造函数。。

vector 内部存储是可以动态增加的,当你添加新的对象后,如果要把底层的存储扩大,那么把原来的对象拷贝过来

应该是只有一次拷贝构造函数。

img

vector 在push第三个元素时,调整大小了, 又重新分配了内存,拷贝了之前的两个元素

你怎么判断有三次拷贝构造函数的?
应该是三次构造函数吧,String("Three")一次构造,产生临时对象作为参数,参数传递给vector,拷贝构造一次,vector可能将变量进行存储,再构造一次。

还有一次是由push_back()的参数在vector内部的数组里构造该元素