0
我只是編程的新手,並且想要了解Linux下的gcc做什麼,當我用std::vector()
保留空間時。 我期望的東西像new
聲明,但我發現_M_allocate
在vector.tcc
。 環顧四周後,我發現這些地方的聲明都是_M_something
,但沒有正確的解釋。 有人可以幫助我嗎? 這些符號如何以及在哪裏解決?用_M_allocate理解std :: vector()分配
我只是編程的新手,並且想要了解Linux下的gcc做什麼,當我用std::vector()
保留空間時。 我期望的東西像new
聲明,但我發現_M_allocate
在vector.tcc
。 環顧四周後,我發現這些地方的聲明都是_M_something
,但沒有正確的解釋。 有人可以幫助我嗎? 這些符號如何以及在哪裏解決?用_M_allocate理解std :: vector()分配
_M_something
表示內部成員函數。它有一個reserved indentifier(下劃線+大寫字母)。
Member data and function names: _M_.*
Examples: _M_num_elements _M_initialize()
std::vector
不使用生new/delete
,而是std::allocator
管理/構建的內存塊。
'_M_something'是內部幫手。 ('_M_'部分使它們成爲保留的標識符,所以用戶代碼不能合法地使用(或'#define')。)你應該查看所有細節的。至於'_M_allocate',它只是使用allocator()分配內存。 –
2014-10-07 12:58:49
請不要試圖通過閱讀標準庫的源代碼來學習C++。它的性能不是可讀性,故意使用不可讀的變量名來避免名稱衝突。 – sjdowling 2014-10-07 13:04:16
好的,明白了! @sjdowling你還想了解什麼標準庫? – Tik0 2014-10-07 13:24:22