2011-06-24 17 views
0

我是編程新手。區別SAFE_RELEASE(),SAFE_DELETE()

我想知道釋放和刪除功能。

當我用new分配內存時,我應該用delete來終止它。

但是,當我應該使用發佈?

有什麼區別發佈和刪除...?

+0

其中是SAFE_RELEASE和SAFE_DELETE定義它們不是標準C或C++的一部分 – Mark

回答

4

C++沒有發佈,也許你看到在一個涉及COM +的教程?像DirectX一樣?

當然,SAFE_RELEASESAFE_DELETE實際上不是C++的一部分,並且很可能是某些頭文件中定義的宏。

總之,這裏的規則:

  • delete[]new[]
  • deletenew
  • free()malloc()/calloc()/realloc()
4

如果您正在尋找定義你會發現

#define SAFE_RELEASE(p) { if ((p)) { (p)->Release(); (p) = 0; } } 
#define SAFE_DELETE(a) if((a) != NULL) delete (a); (a) = NULL; 

SAFE_DELETE應該用於新

SAFE_RELEASE分配的內存應該 「引擎蓋下」 被調用COM對象(如DirectX的對象),並doind這樣的

if (--ref_cnt==0) 
{ 
    delete this; 
} 

它遞減一個引用計數器並釋放該對象,如果沒有更多的引用它。

+0

哦,奇妙的'SAFE_DELETE'將指針清零以確保我們不會過度訪問它指向的對象...... –