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

时间:2014-01-27 15:39:54

标签: c++ .net c++-cli memory-management

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

unsigned char* mBytes = new unsigned char[hSize];

如何在返回前释放此mBytes?

2 个答案:

答案 0 :(得分:13)

每个:
  • new[] - delete[]应该被称为
  • new - delete应该被称为
  • malloc() - free()应该被称为
  • ref new / gcnew - 自动释放内存
您应该 尽可能避免自己负责内存管理
  • 关注RAII idiom
  • 偏好具有自动存储持续时间的对象而不是动态分配的对象
  • 利用智能指针,它将确保使用适当的(显式指定的)方式释放内存,并且它将在每个返回/退出路径上发生(即使抛出异常)

在这种情况下,您使用new[]进行分配,因此您应该通过调用来解除分配此内存:

delete[] mBytes;

答案 1 :(得分:3)

只需使用delete[]运算符。

delete[] mBytes;

应该做的工作。

delete用于处理new

通过托管c ++可以通过关键字__gc指定要通过垃圾收集器收集的类。例如。类定义:

 __gc class gc  {
  int* i;
  char* g;
  float* j;
};

MSDN:)