gpt4 book ai didi

c++ - 将 boost::object_pool 与 vector 一起使用时得到无效指针

转载 作者:搜寻专家 更新时间:2023-10-31 01:27:09 24 4
gpt4 key购买 nike

我尝试使用 boost::object_pool 创建一个包含 vector 作为其成员数据的对象。这是代码。

#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> 的未初始化实例被销毁(根据 documentation 所有分配的对象都将被隐式销毁)。

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

A* a = p.malloc();

A* a = p.construct();

关于c++ - 将 boost::object_pool 与 vector 一起使用时得到无效指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53966232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com