差异SAFE_RELEASE(),SAFE_DELETE()

huo*_*ooo 1 c c++ directx

我是编程的新手.

我想知道发布和删除功能.

当我用new分配内存时,我应该用delete来终止它.

但是当我应该使用释放?

释放和删除有什么区别......?

cpr*_*mer 6

如果您正在寻找定义,您会发现

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

SAFE_DELETE应该用于分配new的内存

应该为com对象调用SAFE_RELEASE(比如directx对象),并且"引擎盖下"是这样的事情

if (--ref_cnt==0)
{
   delete this;
}
Run Code Online (Sandbox Code Playgroud)

如果没有对它的引用,它会递减引用计数器并释放该对象.


Eva*_*ran 5

c++ 没有发布,也许你在一个涉及 COM+ 的教程中看到过?喜欢 DirectX?

当然, SAFE_RELEASE并且SAFE_DELETE实际上不是 c++ 的一部分,很可能是在某些头文件中定义的宏。

无论如何,这是规则:

  • delete[] 你什么 new[]
  • delete 你什么 new
  • free()你什么malloc()/ calloc()/realloc()