Defining std::vector::push_back(new Object) Is this the best way to construct a vector of 2D points for return?

I don't entirely understand new and delete so I'm concerned about any memory leaks that I might be incurring.

std::vector&lt;Point2D&gt; results;
results.reserve(max_results);


... inside a loop /

Point2D* point = new Point2D(x, y);
results.push_back(*point);
delete point;


It might be that I could do this without constructor.

class Point2D {
public:
    double X;
    double Y;
    Point2D();
    Point2D(double X, double Y);
    void set(double X_p, double Y_p);
    void set(Point2D* point_p);
};
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.