其實,每次給一個string對象分配的空間都是它原來對象所占空間的兩倍,因為如果不這樣做,一旦原對象增長,就必須在開辟一塊新空間把原對象所有內容都copy過去,再把新增加的內容也放到里面去。而一般來講string給一個空對象分配的初始空間是15,此后如果string對象增加了增長后的空間都是15*2^n。如下圖所示:
String類其實是模版類的實例化,它的模版類原型如下所示:
我們用的string就是第一個實例化類,可以看出其實char_traits和allocator也是模版類,所以實際上整個模版類的類型參數僅僅是chatT而已。