Your question is based on a false premise, namely that a default-constructed std::vector<T>
will perform a [zero-length] allocation.
There is literally no reason for it to do so. A fresh vector should have capacity zero (though this is required by sanity, not by the standard).
As such, your goal is already inherently satisfied.
To be blunt, the standard library is not quite that stupid.