std::vector<char*> memory_a;I don't see the leak you're talking about. m_pChunks is an std::vector so std:move should take care of anything
memory_a.push_back( new char[ 100 ] );
std::vector<char*> memory_b;
memory_a = std::move( memory_b );
So, you don't see a leak here? The char pointers will be moved over, but the memory being pointed to by each element in memory_a ( memory_a[0] for instance ) won't be freed.
You'd have to delete each element before you move memory_b onto memory_a to avoid leaks.
For instance, if they were
std::vector<std::unique_ptr<char[]>> uptr_mem_a;
uptr_mem_a.push_back( std::make_unique<char[]>( 100 ) );
std::vector<std::unique_ptr<char[]>> uptr_mem_b;
uptr_mem_a = std::move( uptr_mem_b );
Because each unique_ptr has a destructor that delete's each element, no leaks happen.