RAII and C++ STL

c++, raii, stl

Solution

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

Problem

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: - Give my resource a default constructor - Store them as heap objects (and wrap them in a shared pointer) Option 1 makes it possible to construct invalid resources and option 2 forces me to use the heap. Am I missing any options here?

Original source