C++ 清理共享内存中的向量

C++ 清理共享内存中的向量,c++,memory-management,boost-interprocess,C++,Memory Management,Boost Interprocess,我正在使用boost::interprocess::managed_shared_memory在不同的进程之间共享一些数据,我想知道清理是如何工作的。一般来说,我必须面对以下情况: boost::interprocess::managed_shared_memory *sharedSegment; typedef boost::interprocess::allocator< MyObject, boost::interprocess::managed_shared_memory::seg

我正在使用boost::interprocess::managed_shared_memory在不同的进程之间共享一些数据,我想知道清理是如何工作的。一般来说,我必须面对以下情况:

boost::interprocess::managed_shared_memory *sharedSegment;
typedef boost::interprocess::allocator< MyObject, boost::interprocess::managed_shared_memory::segment_manager>  SharedMemoryAlloc;
typedef boost::interprocess::vector<MyObject, SharedMemoryAlloc> SharedVector;
SharedVector *sVec;
unsigned int size;

// Do some other stuff and determine correct size
sharedSegment= new boost::interprocess::managed_shared_memory(boost::interprocess::create_only, "TEST", size);
SharedMemoryAlloc *allocToSharedSegment = new SharedMemoryAlloc(sharedSegment->get_segment_manager());
sVec = sharedSegment->construct<SharedVector>("MyVector")( (*allocToSharedSegment) );
delete allocToSharedSegment; 

// Fill sVec, do some computation etc..

// Start cleanup
//sVec->clear(); 
delete sharedSegment;

boost::interprocess::shared_memory_object::remove("TEST"); 
boost::进程间::托管共享内存*共享段;
typedef boost::进程间::分配器共享内存Alloc;
typedef boost::进程间::向量共享向量机;
SharedVector*sVec;
无符号整数大小;
//做一些其他的事情,确定正确的尺寸
sharedSegment=new boost::进程间::托管共享内存(boost::进程间::仅创建共享内存,“测试”,大小);
SharedMemoryAlloc*allocToSharedSegment=new SharedMemoryAlloc(sharedSegment->get_segment_manager());
sVec=sharedSegment->construct(“MyVector”)((*allocToSharedSegment));
删除allocToSharedSegment;
//填写sVec,进行一些计算等。。
//开始清理
//sVec->clear();
删除共享段;
boost::进程间::共享内存\对象::删除(“测试”);
因为我调用boost::进程间::共享内存\对象::删除(“测试”);我一直认为,内存中的所有内容都会被删除,因此我不必处理sVec。但视觉泄漏检测器告诉我,在这一点上有一些内存泄漏。如果在删除共享内存之前清除向量,则一切正常。
可能是sVec在内部持有指针,因此我必须调用clear()?

valgrind
在这里看不到泄漏。分配了6个块,释放了6个块。如果调用
clear()
,该工具是否报告没有错误?调用
clear()
可修复此问题。也许我应该补充一点,
MyObject
包含另一个
std::vector
(我知道,如果我在
MyObject
中增加向量,这可能会有问题,因为共享内存不会增加。但是如果我在
MyObject
中添加一些东西,我的代码会确保有足够的空间)“MyObject包含另一个std::vector“-我看到了一个问题。让它成为
boost::进程间::vector
。嘿,谢谢你的提示。有没有一种方法可以创建一个
boost::interprocess::vector
,而不使用指针或
new
?我只是尝试使用
SharedVector vec
,但似乎没有一个标准的c'tor用于
boost::interprocess::vector
。由于指针的使用意味着动态分配,我不确定是否可以访问对象(因为只有指向对象的指针才会存储到共享内存中,而不是对象本身)