我是否需要在托管C++中明确释放内存?

Jos*_*eph 1 .net c++ memory-management c++-cli

我已经管理了.net C++ dll,这是一个执行以下操作的函数:

unsigned char* mBytes = new unsigned char[hSize];
Run Code Online (Sandbox Code Playgroud)

如何在返回之前释放这个mBytes?

Lih*_*ihO 14

每个:

  • new[]- delete[]应该叫
  • new- delete应该叫
  • malloc()- free()应该叫
  • ref new/gcnew - 自动释放内存
您应该尽可能避免自己处理内存管理:
  • 遵循RAII习语
  • 优先选择自动存储持续时间超过动态分配的对象
  • 利用智能指针,确保使用适当的(显式指定的)方式释放内存,并且它将在每个返回/退出路径上发生(即使抛出异常)
  • 等等

在这种情况下,您用于new[]分配,因此您应该通过调用以下内容来释放此内存:

delete[] mBytes;
Run Code Online (Sandbox Code Playgroud)