提问人:Samuil Dimitrov 提问时间:4/5/2023 更新时间:4/12/2023 访问量:27
OLECHAR 用作指针 - 如果不是 nullptr,它会悬空指针吗?函数 CoTaskMemFree()
OLECHAR used as pointer - will it dangling pointer if not nullptr? Function CoTaskMemFree()
问:
我生成一个 GUID,然后使用 StringFromCLSID() 将其保存在 OLECHAR* 中。如果我在使用 CoTaskMemFree() 后创建一个返回 OLECHAR 而不是 nullptr OLECHAR 的函数 - 它会导致指针悬空吗?我只想返回值,但不知道它是否会导致问题。代码如下:
OLECHAR* generateGUIDString()
{
GUID guid;
CoCreateGuid(&guid);
OLECHAR* guidString;
StringFromCLSID(guid, &guidString);
return guidString;
}
否则我必须多次写:
GUID guid;
CoCreateGuid(&guid);
OLECHAR* guidString;
StringFromCLSID(guid, &guidString);
//use it here in some process
CoTaskMemFree(guidString);
guidString = nullptr;
我只想确保没有内存泄漏或悬空指针,并且程序运行良好。
答:
0赞
Artem Razin
4/12/2023
#1
由于是 C++,您可以返回:std::wstring
std::wstring generateGUIDString()
{
GUID guid;
CoCreateGuid(&guid);
OLECHAR* guidString;
StringFromCLSID(guid, &guidString);
std::shared_ptr<OLECHAR> ptr(guidString, [](OLECHAR* ptr)
{
CoTaskMemFree(ptr);
});
return ptr.get();
}
上一个:悬空指针问题 C++
评论