Defining std::vector::push_back(new Object)
The variable and function names should be lowercase since the types are uppercase.  This would allow for more distinctive naming.
In Point2D, both X and Y should be private.  This applies to all data members.
If you don't need the default constructor for Point2D, leave it out.
There's no need to allocate memory for point; just construct a local object:

Point2D point(x, y);


There should be as little manual memory management in C++ as possible.