boost :: ptr_vector构造函数

时间:2012-04-25 06:33:56

标签: c++ boost constructor boost-ptr-container

我试图在当前项目中使用boost::ptr_vector,并且想知道是否可以在push_back()方法中使用参数化构造函数,或者是否需要使用默认构造函数? / p>

作为第二个问题,如果我定义它还会使用默认构造函数吗?


这可能不是最好的跟进,但我在boost::ptr_vector看到的大部分实现都表明push_back()方法采用new运算符。是否可以创建一个对象,然后将指向该对象的指针提供给容器的push_back()方法?

1 个答案:

答案 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);
}

似乎它试图使用存储在对象指针中的信息放置在数组中。在这种情况下,可以给出一个静态对象。虽然这让我有一种奇怪的感觉,当我考虑出于某种原因给出一个静态对象时(指针容器的某些东西应该只用于唯一的项目/指针。)