是否可以使用删除运算符而不是 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
。
使用其中之一
PtrToStringChars
(就地访问 Unicode 字符,无分配)或
marshal_as<std::wstring>
(使用智能指针 class 管理分配,它将正确自动释放它)
除了 StringToHGlobalUni
要求您手动释放内存之外,该函数的名称完全具有误导性。它与 HGLOBAL
完全没有任何关系。
我读了 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
。
使用其中之一
PtrToStringChars
(就地访问 Unicode 字符,无分配)或marshal_as<std::wstring>
(使用智能指针 class 管理分配,它将正确自动释放它)
除了 StringToHGlobalUni
要求您手动释放内存之外,该函数的名称完全具有误导性。它与 HGLOBAL
完全没有任何关系。