我在 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);
供您阅读和得出自己结论的引用资料:
- Null values
-
class nullable
-
void resize( size_type size, T* to_clone );
- 如果容器支持空值,请参阅to_clone
可以为 0 的注释
关于C++:为什么boost::ptr_vector resize需要对象具有默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13383357/