That calls explicitly the default constructor of the std::vector<Plant>. The constructor would do the same thing even if the member initializer list would omit that call.
it constructs a vector. That may or may not allocate some plants as a side effect (not sure if it immediately makes memory or waits on the first element to be added). So it sets the internal size variable to zero and whatever a vector does to itself when created.
try this in your plant constructor.
Plant ( stuff)
{
static int p = 1;
cout << "created plant # " << p++;
}
and in main, make a vector of plants like you do in garden and play with it.
try an empty one, see what it does. then try a push-back on it, see what that did.
try a preallocated one vector<plant> vp(100);
and whatever you want to do to see if you can get enlightenment as to what is going on.