2

我正在使用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()?

4

0 回答 0