Search code examples
c++boostptr-vector

Moving objects from one Boost ptr_container to another


I want to move certain element from a to b:

boost::ptr_vector<Foo> a, b;
// ...
b.push_back(a.release(a.begin() + i)));

The above code does not compile because the release function returns boost::ptr_container_detail::static_move_ptr<...>, which is not suitable for pushing back.

How should I proceed?

EDIT: I found out that the object returned has .get() .release() that provides a raw pointer (that may also lead to some exception safety issues). I would, however, prefer not relying on undocumented internal functionality, so feel free to share any better solutions...


Solution

  • boost::ptr_vector<Foo> a, b;
    
    // transfer one element a[i] to the end of b
    b.transfer( b.end(), a.begin() + i, a ); 
    // transfer N elements a[i]..a[i+N] to the end of b
    b.transfer( b.end(), a.begin() + i, a.begin() + i + N, a );