Fluent interface and polymorphism for building a scene with shapes
Another thing to consider in your current design:

~Scene() { for (auto &amp; f : v) delete f; }


You are calling the destructor of the base here, not the derived classes' destructors. Remember to make a virtual destructor in your class to solve this problem.