Then we're back to the first design - an object factory which can catch your mistakes and save you time.
Your suggestion about non-copyable is good too.
Yeah, boost has a noncopyable class that you can inherit from to disable copying.