RAII和C++ STL

dir*_*irk 5 c++ stl raii

我有一个案例,我希望在std :: vector中存储资源列表.我认为,我的选择如下:

  1. 为我的资源提供一个默认构造函数
  2. 将它们存储为堆对象(并将它们包装在共享指针中)

选项1可以构造无效资源,选项2强制我使用堆.

我在这里错过了任何选择吗?

R S*_*hko 7

您不需要默认构造函数来获取实例向量.

唯一的限制是当类没有默认构造函数时,你不能使用带有默认参数的vector :: resize.

vec.resize(20);  // requires default constructor
Run Code Online (Sandbox Code Playgroud)

但你可以给vector :: resize一个默认对象:

std::vector<foo> vec;
vec.resize(20, foo(10));  // give a sample object since foo has not default constructor
Run Code Online (Sandbox Code Playgroud)