清理共享内存与里面的矢量

时间:2013-01-04 18:03:29

标签: 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::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 :: interprocess :: shared_memory_object :: remove(“TEST”);我一直认为,无论如何都要删除内存中的所有内容,因此我不需要处理sVec。但Visual Leak Detector告诉我,此时存在一些内存泄漏。如果我在删除共享内存之前清除向量,一切正常。 可能是,sVec在内部保存指针,因此我必须调用clear()?

0 个答案:

没有答案