其实,每次给一个string对象分配的空间都是它原来对象所占空间的两倍,因为如果不这样做,一旦原对象增长,就必须在开辟一块新空间把原对象所有内容都copy过去,再把新增加的内容也放到里面去。而一般来讲string给一个空对象分配的初始空间是15,此后如果string对象增加了增长后的空间都是15*2^n。如下图所示:
String类其实是模版类的实例化,它的模版类原型如下所示:
我们用的string就是第一个实例化类,可以看出其实char_traits和allocator也是模版类,所以实际上整个模版类的类型参数仅仅是chatT而已。