Как сказал Сергей в своем комментарии, я думаю, что это плохо.Деструкторы статических объектов вызываются после главных завершений, как описано в разделе 3.6.3 стандарта C ++ 03:
Деструкторы (12.4) для инициализированных объектов статической длительности хранения (объявленных в области видимости блокаили в области имен) вызывается в результате возврата из main и в результате вызова exit (18.3).Эти объекты уничтожаются в обратном порядке завершения их конструктора или завершения их динамической инициализации.Если объект инициализируется статически, объект уничтожается в том же порядке, как если бы объект был динамически инициализирован.Для объекта массива или типа класса все подобъекты этого объекта уничтожаются до уничтожения любого локального объекта со статической продолжительностью хранения, инициализированной во время построения подобъектов.
и как показано ниже:http://www.geeksforgeeks.org/static-objects-destroyed/.
Но CoUninitialize , который очищает библиотеку COM в главном потоке, вызывается до завершения Main.CoUninitialize очистит все оставшиеся ресурсы, как объяснено в документации msdn.Мы должны вызвать метод Release объектов COM до вызова CoUninitialize, потому что после этого они больше не будут существовать, и поэтому мы должны убедиться, что вызовы деструктора CComPtr происходят до вызова CoUninitialize.Поэтому CComPtr не должен быть статичным.