C++:为什么boost::ptr_vector resize需要对象具有默认构造函数

标签 c++ pointers boost vector ptr-vector

我在 std::vector 上使用了 boost::ptr_vector,因为它将为我处理所有指针的删除。但是当我这样做时:

ptr_vector<SoftLabelRandomTreeFunctor> functors;
functors.resize(number_of_functors);

它提示 SoftLabelRandomTreeFunctor 没有默认构造函数。然而,我的印象是它只需要调整到足够大以适应 number_of_functors * 指向 SoftLabelRandomTreeFunctor 的指针的大小,而不是 number_of_functors * SoftLabelRandomTreeFunctor 本身的大小?

最佳答案

我对 Boost 并没有真正的经验,所以对我的回答持保留态度。但是,浏览 boost::ptr_vector 的文档让我觉得你想要的(从对问题的评论中得出的结论)应该可以这样做:

boost::ptr_vector< boost::nullable<SoftLabelRandomTreeFunctor> > functors;
functors.resize(number_of_functors, 0);

供您阅读和得出自己结论的引用资料:

关于C++:为什么boost::ptr_vector resize需要对象具有默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383357/

相关文章:

c++ - 我应该调用哪个运营商?

c++ - 从 map 中检索后 map 中的对象损坏

c - 在不使用 string.h 的情况下逐字打印 C 中的一个句子

c++ - 使用 Boost lambda 和绑定(bind)排序时出错

c++ - 如何从 udp 端点获取 *my* ip

c++ - 推导显式特化函数模板类型

c++ - boost 中的属性是如何解析的? SOAP xml 解析?

c - fgets 在函数内部获取结构指针崩溃

c++ - 通过引用返回指针数组

c++ - 在 OpenVM 上构建 Boost