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