variant = variant.bstrVal;
Поскольку экземпляр CComVariant
управляет указателем строки, ожидаемая логика с таким назначением состоит в том, что экземпляр класса дублирует строку и инициализирует внутренние члены (тип и указатель строки).В настоящее время принадлежащие значения / ресурсы удаляются.
В случае, если мы передаем в качестве аргумента принадлежащий указатель, мы заинтересованы в том, чтобы убедиться, что значение будет продублировано до того, как будет выпущено значение члена.Или в том, что метод правильно обнаруживает регистр «тот же указатель» и игнорирует присвоение.Начиная с Visual Studio 2015 Update 3, ATL делает именно это: он обнаруживает то же самое назначение указателя и немедленно возвращает пропущенную часть выделения / выпуска.То есть реализация ATL точна и хорошо справляется с этим.