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