I did use CComPtr, but they only reduce the amount of footguns, they don't get rid of them. In my case, I accidentally stored a reference to the inner pointer instead of calling Detach.
My point isn't that there aren't nice idiomatic ways of writing nice windows/c++ code that are not fragile, it's that unless you're well versed in them, you can easily screw things up pretty badly.
[EDIT]: In case it's not clear, I am not a windows C++ developer, I've read a decent amount of windows C++ code, so I sort of know what's going on, but I've written less than 5k lines of windows C/C++ in my life.
https://msdn.microsoft.com/en-us/library/ezzw7k98.aspx
https://msdn.microsoft.com/en-us/library/br244983.aspx
https://msdn.microsoft.com/en-us/library/5yb2sfxk.aspx
https://msdn.microsoft.com/en-us/library/h31ekh7e.aspx