Ownership and deletion responsibility
It depends.  (By the way, as things are your Classifier::Train function is ill-formed due to missing a return type; I'll assume void.)

If you expect the value to need dynamic storage duration, use the first method, but use a smart pointer (std::unique_ptr, boost::scoped_ptr or similar).  That may remove the need for an explicitly-defined destructor; if not, remember the rule of three.

If you do not expect the value to need dynamic storage duration, use the second form.  I recommend passing trainer by const reference, but it really doesn't matter all that much.

If you can't decide, use the latter unless you have a compelling reason to use the former.