Managed.
I find it better not because of the clean design of the managed API (which is much better than the brain-dead COM one), but because of C#. I don't want to start a flamewar, so let's just say that C++ is extremely ugly, unclean and inelegant. Practically useful and in ways powerful, yes, but it should not be used in 87%1 of the situations in which people use it.
And no, C# is not the holy grail of languages either, but it *is* a demonstration of a relatively clean C-based language. If C++ is your only forte, seriously consider learning other languages (e.g. LISP, OCaml, Ruby, Python)--you'll be shocked at how efficient and fun programming can be.
EDIT:
Quote:I believe unmanaged is the way to go when considering portability. c++ was always designed to be easier to read, which, in my opinion is more important than some of the nice features you'll get from managed, especially if you are working in a team or expect others to interpret your code.
C++ is the absolute worst when it comes to readability. Try reading some truly powerful generic code--i.e. templates--, it just makes your head spin. And don't get me started about the error messages2.
As for portability, no. Unless you're talking about XBox kind of portability, then yes. If you're aiming for cross-platform development, use OpenGL. Or better, use an existing engine, like OGRE (whose C# port, Axiom, is portable and cross-platform).
1Figure made up on the spot
2And I'm not talking about standard C++ library error messages and STLFilt and all that. I'm talking about general error messages when generic programming or template metaprogramming is involved. Talk about rape.