2012-04-25 74 views
0

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

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


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

回答

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

它似乎是它尝试使用存储在对象的指针的信息在阵列中放置。在这种情况下,可以给出一个静态对象。虽然这给了我一个奇怪的感觉,当我考虑给出一个静态对象由于某种原因(沿指针容器的行应该只用于唯一的项目/指针)。

+0

ptr_vector期望管理的生命周期它包含的对象,就像常规矢量一样。 (ptr_vectors的要点是存储指针,但提供了保存实际对象的向量的语义)。因此,存储指向静态对象的指针并不是一个好主意。 – 2012-04-25 11:07:53

+0

@davidschwartz进行了测试:试图将一个适当类型的'static'对象放置到'ptr_vector'中,并且没有引用或取消引用的组合可以执行操作。结论:试图将“静态”对象放入“ptr_vector”是非法的,可能还有任何“ptr_container” – gardian06 2012-04-25 15:49:11

相关问题