In this particular example it is very easy to screw it up. Your way involves many more lines of code and use of the preprocessor which makes searching through code very difficult. I can easily find all the noncopyable classes by searching for "noncopyable". I don't have to worry about someone coming along and screwing up the access modifier at a later date. It is much less likely that someone will misunderstand what the code is trying to do, even if they don't know much about C++ value semantics.
Edit: I guess my criticism regarding searching isn't valid here, but I have come to try and avoid the preprocessor as much as possible. I've just been bitten by it too many times.
class Noncopyable
{
private:
Noncopyable(const Noncopyable&);
Noncopyable& operator(const Noncopyable&);
};
That's pretty much was boost::noncopyable is, and it's the same thing you wrote, but it removes the preprocessor.