Using boost::interprocess offset_ptr
Using boost::interprocess offset_ptr
我需要将四叉树的结构存储在共享内存中。
它是一个类,有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);
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- OpenGL glBufferSubData Offset issue
- 引用 std::shared:ptr 以避免引用计数
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- C++中的指针否定 (!ptr == NULL)
- 从const ptr*转换为ptr*时出现问题
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- 对唯一 ptr 无效读取的引用向量
- C++ 类型转换基础 PTR 到派生 PTR 保存在引用类中
- 如何使用非类型参数传递模板化类的 Ref 或 Ptr