Отмена выделения HSTRING с помощью WindowsCreateStringReference и WindowsCreateString - PullRequest
0 голосов
/ 11 декабря 2018

В моем WinRT API я должен создать и вернуть HSTRING значения.До сих пор я использовал WindowsCreateString для создания HSTRING значения и удаления его вручную с помощью WindowsDeleteString.

WindowsCreateStringReference выглядит довольно удобно с точки зрения того, что не нужно удалять HSTRING вручную.

Вам не нужно вызывать функцию WindowsDeleteString для отмены выделения быстрого прохода HSTRING, созданного функцией WindowsCreateStringReference.

Может ли кто-нибудь уточнить, что такое fast-pass string и как и когда оно фактически перераспределяется?

Другой вопрос, который возникает здесь, - когда я предпочитаю WindowsCreateString над WindowsCreateStringReference

1 Ответ

0 голосов
/ 11 декабря 2018

Строка 'fast-pass' не управляет временем жизни своей строки - она ​​просто создает оболочку вокруг любой базовой строки, которую вы ей даете.Эта обертка очень легкая.

Это означает 2 вещи - во-первых, вам не нужно удалять HSTRING (так как он не владеет базовой строкой), но что более важно, вы должны поддерживать базовую строку живойи не изменяется во время использования строки быстрого прохода.

Так что это полезно, если у вас уже есть строка (скажем, const char * в разделе родата, или из другого источника, чье время жизни строго больше, чемвремя жизни HSTRING).Но это всего лишь оптимизация, чтобы избежать копирования.

МОЯ рекомендация - если вы заботитесь только о времени жизни и правильно освободите строку, когда закончите, - это использовать класс Microsoft::WRL::Wrapper::HString, который обеспечиваетхорошая оболочка RAII в стиле C ++ вокруг raw HSTRING и будет правильно освобождать их, когда закончите.Затем, используя функции-члены Detach, Get, GetAddressOf и т. Д., Вы можете взаимодействовать с другими API-интерфейсами, которые ожидают raw HSTRING s.

Если вы все равно заботитесь о скорости, всегда есть *Класс 1018 *, который дублирует функциональность WindowsCreateStringReference, но опять же с красивым объектом CII RAII.

...