我试图在当前项目中使用boost::ptr_vector
,并想知道是否可以在push_back()方法中使用参数化构造函数,或者如果我需要使用默认构造函数?boost :: ptr_vector构造函数
作为第二个问题,如果我定义它,它仍然会使用默认构造函数吗?
这可能不是最好的跟进,但大部分我所用boost::ptr_vector
看到的实现表明push_back()
方法将new
操作。是否可以创建一个对象,然后将该对象的指针指向容器的push_back()
方法?
我试图在当前项目中使用boost::ptr_vector
,并想知道是否可以在push_back()方法中使用参数化构造函数,或者如果我需要使用默认构造函数?boost :: ptr_vector构造函数
作为第二个问题,如果我定义它,它仍然会使用默认构造函数吗?
这可能不是最好的跟进,但大部分我所用boost::ptr_vector
看到的实现表明push_back()
方法将new
操作。是否可以创建一个对象,然后将该对象的指针指向容器的push_back()
方法?
为了使用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);
}
它似乎是它尝试使用存储在对象的指针的信息在阵列中放置。在这种情况下,可以给出一个静态对象。虽然这给了我一个奇怪的感觉,当我考虑给出一个静态对象由于某种原因(沿指针容器的行应该只用于唯一的项目/指针)。
ptr_vector期望管理的生命周期它包含的对象,就像常规矢量一样。 (ptr_vectors的要点是存储指针,但提供了保存实际对象的向量的语义)。因此,存储指向静态对象的指针并不是一个好主意。 – 2012-04-25 11:07:53
@davidschwartz进行了测试:试图将一个适当类型的'static'对象放置到'ptr_vector'中,并且没有引用或取消引用的组合可以执行操作。结论:试图将“静态”对象放入“ptr_vector”是非法的,可能还有任何“ptr_container” – gardian06 2012-04-25 15:49:11