【发布时间】:2017-05-05 10:15:20
【问题描述】:
我在 Windows 上有一个 boost 进程间 managed_shared_memory,我有一个 boost 进程间向量存储在其中。向量由以下人创建或打开
auto* vec = shm.find_or_construct< MyVector >( "Data" )( shmAllocator );
如 boost 进程间示例中所述。我的意思是我现在构造或打开了一个对象vec 引用共享内存中的对象。我检查了 vec 的 d'tor 仅在我使用 shm.destroy<MyVector>("Data") 时被调用,如果我调用 delete vec 应用程序崩溃。
现在如何在不破坏基础数据的情况下正确释放对象“vec”? 完整场景:
- 两个用户正在运行我的软件,通过共享内存共享数据(在使用文件模拟的 Windows 中)
- 一个用户退出软件,如果我不调用
destroy,我有内存泄漏,如果我按照 boost 文档中的说明调用它:
在 Windows 操作系统中,当前版本支持通常可接受的 UNIX 取消链接行为模拟:使用随机名称重命名文件并标记为在最后打开的句柄关闭时删除
- 另一个用户启动该软件并尝试共享内存,但由于文件已重命名,它无法与我的软件的其他运行实例共享内存。
【问题讨论】: