Isn't this much simpler and more natural for the user:

unique_ptr<Klass>  foo(new Klass);



It is, but doesn't this require Klass here to be a complete type? Is Klass the interface or the implementation?

If Klass is the implementation, how does this hide the implementation?

And if Klass is the interface, won't it need to contain another pointer, which would result in following two pointers instead of one for all method calls?