I have a case where I wish to store a list of resources in a std::vector. As I see it, my options are as follows:
Option 1 makes it possible to construct invalid resources and option 2 forces me to use the heap.
Am I missing any options here?
You don't need a default constructor to have a vector of instances.
The only limitation is you can't use vector::resize with the default argument when the class has no default constructor.
vec.resize(20); // requires default constructor
but you can give vector::resize a default object:
std::vector<foo> vec;
vec.resize(20, foo(10)); // give a sample object since foo has not default constructor