将boost :: object_pool与向量一起使用时得到无效的指针

时间:2018-12-29 02:35:21

标签: c++

我试图使用boost::object_pool创建一个对象,其中包含一个向量作为其成员数据。这是代码。

#include <iostream>
#include <vector>
#include <boost/pool/object_pool.hpp>

class A {
public:
    std::vector<int> children;
};

int main() {
    boost::object_pool<A> p;
    A* a = p.malloc();
    std::cout << a->children.size() << std::endl;
}

这是结果。

free(): invalid pointer
18446720595997429822

我期望程序输出0。但是,如您所见,这里显然有问题。分配的指针不是有效的指针,为什么?我该怎么做才能正确呢?

1 个答案:

答案 0 :(得分:3)

您正在使用boost::object_pool<X>::malloc分配对象,该对象仅执行内存分配,而不调用对象构造函数。您已经在为未初始化的对象调用size()。稍后退出时,p的销毁会导致std::vector<int>的未初始化实例被销毁(根据documentation,所有分配的对象都将被隐式销毁)。

如果需要构造对象,则应使用boost::objetc_pool<X>::construct。只需替换

A* a = p.malloc();

使用

A* a = p.construct();