Using boost::interprocess offset_ptr

Using boost::interprocess offset_ptr

本文关键字:ptr offset interprocess boost Using      更新时间:2023-10-16

我需要将四叉树的结构存储在共享内存中。

它是一个类,有4个指向树节点区域的指针和点向量:

class CSNode4
{
...
CSNode4* node0;
CSNode4* node1;
CSNode4* node2;
CSNode4* node3;
vector<vec2> pointArray;
};

我试过了

class CSNode4
{
...
offset_ptr<CSNode4> node0;
offset_ptr<CSNode4> node1;
...
};

和使用as:

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,...);

这个工作正常,直到我尝试static_cast node0:

offset_ptr<CSNode4> N1 = static_cast<CSNode4*>(rootNode->node0);

:

错误C2440: 'static_cast':无法从'boost::interprocess::offset_ptr'转换为'CSNode4 *'

(MSVC 2010, boost 1.42)

我做错了什么,我怎么能解决它?

我假设CSNode4等同于CNode4。由于node0是一个offset_ptr,当然您不能将其静态转换为CSNode4的指针。您应该直接使用offset_ptr的复制构造函数:

boost::interprocess::offset_ptr<CSNode4> N1(rootNode->node0);