将 boost::object_pool 与矢量一起使用时指针无效

Got invalid pointer when using boost::object_pool with vector

本文关键字:一起 指针 无效 object boost pool      更新时间:2023-10-16

我尝试使用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.但是,正如您所看到的,这里显然有问题。分配的指针不是有效的指针,为什么?我应该怎么做才能使它正确?

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

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

A* a = p.malloc();

A* a = p.construct();