c++ - boost::ptr_vector 构造函数

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

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

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


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

最佳答案

为了使用 ptr_vector 或任何 ptr_container 很像标准 vector 或容器。只要定义了构造函数,就可以使用所需的任何构造函数(默认值也可以)。唯一真正的区别是 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);
}

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

关于c++ - boost::ptr_vector 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10310491/

相关文章:

c++ - 我尝试在 linuxLite 上使用 qt creator 运行 qt-vtk-project

c++ - 在 Cygwin 上链接 Boost 库

C++ boost date_input_facet 似乎使用传递给 facet 构造函数的不正确格式意外地解析日期

perl - 如何重命名 Perl 的 Moose 模块提供的默认构造函数?

c++ - 如何从 C 宏调用 C++ 重载函数

c++ - 使用 MinGW 通过 ICU 构建 Boost

c++ - 找不到Boost库| C++

c++ - 我应该如何使用 C++ 构造函数异常?

list - 在Dart中作为可选构造函数参数列出的列表为null

c++ - 在 C++ 中使用具有可变帧速率的 FFmpeg 库(不是 libav 分支)以编程方式捕获视频