我试图在当前项目中使用boost::ptr_vector
,并且想知道是否可以在push_back()方法中使用参数化构造函数,或者是否需要使用默认构造函数? / p>
作为第二个问题,如果我定义它还会使用默认构造函数吗?
这可能不是最好的跟进,但我在boost::ptr_vector
看到的大部分实现都表明push_back()
方法采用new
运算符。是否可以创建一个对象,然后将指向该对象的指针提供给容器的push_back()
方法?
答案 0 :(得分:2)
为了使用ptr_vector
或任何ptr_container
,就像使用标准向量或容器一样。只要定义了构造函数,使用任何所需的构造函数是合法的(默认值也可以)。唯一真正的区别是ptr_container
采用指针而不是静态对象,并支持克隆,它作为深拷贝与浅拷贝相关。
关于后续行动。可以将现有对象用于push_back()
方法:
#include <boost/ptr_container/ptr_vector.hpp>
#include <vector>
typedef boost::ptr_vector<Base> thing;
void foo(void){
thing Bar;
Object * newObj = new Object(param1, param2);
bar.push_back(newObj);
}
似乎它试图使用存储在对象指针中的信息放置在数组中。在这种情况下,可以给出一个静态对象。虽然这让我有一种奇怪的感觉,当我考虑出于某种原因给出一个静态对象时(指针容器的某些东西应该只用于唯一的项目/指针。)