【问题标题】:boost::ptr_vector constructorboost::ptr_vector 构造函数
【发布时间】:2012-04-25 06:33:55
【问题描述】:

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

作为次要问题,如果我定义它,它是否仍会使用默认构造函数?


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

【问题讨论】:

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


    【解决方案1】:

    为了使用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 的重点是存储指针,但提供保存实际对象的向量的语义。)因此,将指向静态对象的指针存储在其中并不是一个好主意。
    • @davidschwartz 执行了测试:尝试将适当类型的 static 对象放入 ptr_vector 中,并且不允许执行任何引用或取消引用的组合。结论:尝试将static 对象放入ptr_vector 以及可能的任何ptr_container 中是非法的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多