1. Global namespace pollution. That can be easily fixed, by making FooPrivate innter class of Foo.
I don't think that a struct supplied with and named like the class followed by Private is a pollution, and it matches the naming conventions in Qt3. You can make it an inner class, but what i tried to point out is that you have to make the type public, because the generated code from moc needs access to that structure in cases. I gave that hint, that beginners avoid this issue from the beginning.
2. High danger of unexpected behaviour if implementation of assignment and copy contrsuctor is omitted or incorrect. If you forget to implement copy operator and then ....
I leaved that out. Of course you can use copy constructors and stuff or you favorite smartpointer, or both or whatever one prefer... --David