我试图使用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
。但是,如您所见,这里显然有问题。分配的指针不是有效的指针,为什么?我该怎么做才能正确呢?
答案 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();