是否可以使用删除运算符而不是 Marshal.FreeHGlobal 方法来从 wchar_t* 中释放内存?

Can the delete operator be used instead of the Marshal.FreeHGlobal method to free memory from a wchar_t*?

我读了 official documentation for the StringToHGlobalUni method,它说应该使用 FreeHGlobal 方法来释放内存。

StringToHGlobalUni方法分配的内存在native堆上,所以我不明白为什么delete运算符不能使用。

我搜索了很多,但找不到任何解释为什么我不能使用 delete 运算符。

我是新手,一些解释会对我有所帮助。是否可以使用删除运算符?

代码

const wchar_t* filePath = (const wchar_t*)(Marshal::StringToHGlobalUni(inputFilePath)).ToPointer();
Marshal::FreeHGlobal(IntPtr((void*)filePath));

不要在 C++/CLI 中使用 Marshal::StringToHGlobalUni

使用其中之一

  1. PtrToStringChars(就地访问 Unicode 字符,无分配)或
  2. marshal_as<std::wstring>(使用智能指针 class 管理分配,它将正确自动释放它)

除了 StringToHGlobalUni 要求您手动释放内存之外,该函数的名称完全具有误导性。它与 HGLOBAL 完全没有任何关系。