C++ 使用boost::进程间偏移量
我需要在共享内存中存储四叉树的结构 它是一个具有4个指针的类,用于树节点区域和点向量:C++ 使用boost::进程间偏移量,c++,boost,C++,Boost,我需要在共享内存中存储四叉树的结构 它是一个具有4个指针的类,用于树节点区域和点向量: class CSNode4 { ... CSNode4* node0; CSNode4* node1; CSNode4* node2; CSNode4* node3; vector<vec2> pointArray; }; 类CSNode4 { ... CSNode4*node0; CSNode4*node1; CSNode4*node2; CSNode4*node3; 矢量点阵列; }; 我
class CSNode4
{
...
CSNode4* node0;
CSNode4* node1;
CSNode4* node2;
CSNode4* node3;
vector<vec2> pointArray;
};
类CSNode4
{
...
CSNode4*node0;
CSNode4*node1;
CSNode4*node2;
CSNode4*node3;
矢量点阵列;
};
我试过了
class CSNode4
{
...
offset_ptr<CSNode4> node0;
offset_ptr<CSNode4> node1;
...
};
类CSNode4
{
...
偏移量_ptrnode0;
偏移ptr节点1;
...
};
并用作:
typedef allocator<void, managed_shared_memory::segment_manager> void_allocator;
const void_allocator alloc_void(segment.get_segment_manager());
CSNode4* rootNode = segment.construct<CSNode4> (_RootNode) (alloc_void);
rootNode->node0 = new CSNode4(alloc_void,...);
typedef分配器void\u分配器;
const void_分配器alloc_void(segment.get_segment_manager());
CSNode4*rootNode=section.construct(_rootNode)(alloc_void);
rootNode->node0=新的CSNode4(alloc_void,…);
在我尝试静态_cast node0之前,这一切正常:
offset_ptr<CSNode4> N1 = static_cast<CSNode4*>(rootNode->node0);
offset\u ptr N1=static\u cast(rootNode->node0);
我得到:
错误C2440:“静态\u转换”:无法从“boost::进程间::偏移量\u ptr”转换为“CSNode4*”
(MSVC 2010,boost 1.42)
我做错了什么?如何修复它?我假设CSNode4相当于CNode4。由于node0是一个offset\u ptr,当然不能将其静态\u转换为CSNode4的指针。您应该直接使用offset_ptr的复制构造函数:
boost::interprocess::offset_ptr<CSNode4> N1(rootNode->node0);
boost::进程间::偏移量\u ptr N1(rootNode->node0);
谢谢,但仍然无法工作,现在我得到:访问冲突读取位置0x0075。。。我还尝试使用get()成员:offset\u ptr node0\u pt;node0_pt=rootNode->node0;(node0_pt.get())->…也不工作。。。其他:CNode4而不是CSNode4是语法,更改为,分配器仅用于向量成员,不应该影响这一点吗?