Отмена выделения HSTRING с помощью WindowsCreateStringReference и WindowsCreateString

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

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

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

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

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

0

Решение

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

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

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

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

Если вы заботитесь о скорости, всегда есть Microsoft::WRL::Wrapper::HStringReference класс, который дублирует WindowsCreateStringReference Функциональность, но опять же с красивым объектом CII RAII.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector