Очистка разделяемой памяти с вектором внутри

я использую повышение :: межпроцессного :: 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 ()?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector