在WinRT API中,我必须创建并返回HSTRING
值。到目前为止,我一直在使用WindowsCreateString
创建HSTRING
值并使用WindowsDeleteString
手动将其删除。
WindowsCreateStringReference看起来非常方便,因为不必手动删除HSTRING
。
您不需要调用WindowsDeleteString函数来取消分配WindowsCreateStringReference函数创建的快速传递HSTRING。
谁能详细说明什么是fast-pass string
以及如何以及何时实际取消分配它?
这里出现的另一个问题是,什么时候我应该更喜欢WindowsCreateString
而不是WindowsCreateStringReference
?
最佳答案
“快速通过”字符串不能管理其字符串的生存期,它只是围绕您提供的任何基础字符串创建包装器。该包装器非常轻巧。
这意味着两件事-首先,您不需要删除HSTRING
(因为它不拥有基础字符串),但更重要的是,在使用快速传递字符串时,必须保持基础字符串有效且不变。
因此,如果您已经有一个字符串(例如,在rodata节中为const char *,或其他生存期严格大于HSTRING生存期的来源),则它很有用。但这只是为了避免复制而进行的优化。
我的建议-如果您只关心生命周期并在完成后正确释放字符串-请使用Microsoft::WRL::Wrapper::HString
类,该类为原始HSTRING
提供了一个不错的C ++样式RAII包装,并在完成后会正确释放它们。然后使用成员函数Detach
,Get
,GetAddressOf
等,然后可以与需要原始HSTRING
的其他API进行交互。
如果您也关心速度,那么总会有一个Microsoft::WRL::Wrapper::HStringReference
类复制WindowsCreateStringReference
功能,但还是要使用一个不错的c ++ RAII对象。
关于c++ - 使用WindowsCreateStringReference和WindowsCreateString进行HSTRING取消分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53719896/