class Base{};
class Sub : public Base{};
class P
{
public:
  virtual ~P(){ delete base; }
  template<class T> void Create(){ base = new T(); }
  template<class T, class ARG0> void Create(ARG0 arg0){ base = new T( arg0 ); }
private:
  Base* base;
};
P p;
p.Create<Sub>();

ユーザーにnew演算子を使わせたくないんで、テンプレートでnewを隠蔽するのは設計的にアリですか?