Boost logo

Boost Users :

Subject: [Boost-users] [Interprocess] Strange behaviour on erase in a b::i::vector of b::i::weak_ptr
From: Gaetan Gaumer (gaetan.gaumer_at_[hidden])
Date: 2010-11-30 04:16:38


Hello Ion and others,
I currently work with b::i::vectors storing b::i::managed_weak_ptr on
objects created in a fixed_managed_shared_memory.
I add shared_ptr whith push_back, but when I want to remove a weak_ptr
using erase, the last item is erase instead of the
one I want to remove.
In the sample code below I add 3 objects and try to remove the middle
one in both a vector of shared_ptr and a vector of weak_ptr :
interprocessWeakVectorTest.cc http://pastebin.com/yDCngGw4

The result is the expected one for vector of shared_ptr, but not for a
vector of weak_ptr :
foo_shared_vector:
1
3
foo_weak_vector:
1
2

A tried the same with std::vectors of boost::shared_ptr and
boost::weak_ptr (sample code below) :
weakVectorTest.cc http://pastebin.com/fMEi0iaA

The result is the expected one for both :
foo_shared_vector:
1
3
foo_weak_vector:
1
3

I don't understand the behaviour of erase on b::i::vector of b::i::weak_ptr.
Is this some kind of bug or am I doing something wrong ?
For information I'm doing the same kind of thing with b::i::maps of
b::i::shared_ptr and b::i::weak_ptr and the behaviour is correct.

I compile this with : g++44 (GCC) 4.4.0 20090514 (Red Hat 4.4.0-6),
and the 1.44 release of boost (but nothing in the 1.45 release note
seems related to this),
using options : -std=c++0x -lrt

I don't know why but when I remove -std=c++0x this do not compile
anymore even if I don't think I use any c++0x feature (am I ?).

Can you check this or explain me my error ?
Thank you.
Gaëtan


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net