這是最近看的一片短文的title,當時就很好奇。經常查閱MSDN的程序員都會有這個印象,微軟code sample中常見的是ZeroMemory,而不是語言提供的“{0}”清零功能(不過,我一直也沒有問個why)。c++語法中聲明對數組或純結構(struct),可以使用例如SPerson sTest = {0}; 來將所有成員置0.
那篇文章的解釋是,Microsoft使用ZeroMemory會更clear,因為“= {0}” 這樣的語法有些生僻,不是所有人都可以一下子明白。
實際上,兩者還是有一些區別。其一,ZeroMemory會將結構所有字節置0,而={0}只會將成員置0,其中padding字節不變。
其二,但一個struct有構造函數或虛函數時,ZeroMemory可以,而={0}會編譯不過。顯然,后者起到了一些保護作用,因為對一個有虛函數的對象使用ZeroMemory時,會將其虛函數的指針置0,這是非常危險的,因為調用虛函數時,程序顯然會crash。參看如下代碼: