将 boost::object_pool 与矢量一起使用时指针无效
Got invalid pointer when using boost::object_pool with vector
我尝试使用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();
相关文章:
- 在将 new 与指针一起使用时,创建数组的指定长度
- 尝试将指针与结构一起使用时出错
- 为什么我们将 [ ] 与指向数组的指针一起使用?
- 如何将数组与指针一起使用?
- 将函数指针和对象放在一起
- 如何将 string.erase() 与指针一起使用?
- 将智能指针与容器一起使用的原因
- 为什么指针和c++中的函数放在一起
- 为什么当我尝试将priority_queue与参数一起使用作为指向结构的指针时会弹出错误
- __unaligned说明符何时与指针一起使用?
- 如何定义与将 Lambda 与捕获作为回调一起使用兼容的函数指针
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- 为什么在将多态行为与指向接口的指针一起使用时没有调用析构函数?
- 自动关键字与智能指针一起
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用
- shared_ptr ::重置仅与原始指针一起使用
- 将 boost::function 与指向派生类的共享指针的参数一起使用
- 为什么在 sizeof() 函数中与 * 运算符一起使用和不使用 * 运算符时,指向结构变量的指针大小会有所不同?
- 为什么动态演员只能与参考和指针一起使用
- 是否可以将SDL2与智能指针一起使用