Opened 14 years ago
Closed 14 years ago
#2532 closed Bugs (fixed)
ptr_set<T>::erase(const T&) does not update the tree
| Reported by: | Owned by: | Thorsten Ottosen | |
|---|---|---|---|
| Milestone: | Boost 1.38.0 | Component: | ptr_container |
| Version: | Boost Development Trunk | Severity: | Problem |
| Keywords: | ptr_set erase | Cc: |
Description
Hi
In some cases ptr_set<T>::erase(const T&) deletes the object as expected but does not remove the node in the tree.
=> the tree is left with a dangling pointer
Consider the following example:
#include <boost/ptr_container/ptr_set.hpp>
#include <boost/foreach.hpp>
#include <iostream>
using namespace std;
class Int
{
public:
Int (int v) : val (v) {
cout << "\t\tnew: " << this << " -> " << val << endl;
}
~Int () {
cout << "\t\tdelete: " << this << " -> " << val << endl;
}
bool operator< (const Int& b) const { return val < b.val; }
int val;
};
int main()
{
boost::ptr_set<Int> s;
s.insert (new Int (3));
s.insert (new Int (1));
s.insert (new Int (2));
BOOST_FOREACH (Int& i, s) {
cout << &i << " -> " << i.val << endl;
}
cout << endl;
s.erase (Int(2));
BOOST_FOREACH (Int& i, s) {
cout << &i << " -> " << i.val << endl;
}
return 0;
}
--> output
new: 0x9759008 -> 3 new: 0x9759030 -> 1 new: 0x9759058 -> 2 0x9759030 -> 1 0x9759058 -> 2 0x9759008 -> 3 new: 0xbfe387ac -> 2 delete: 0x9759058 -> 2 <---- object deleted delete: 0xbfe387ac -> 2 0x9759030 -> 1 0x9759058 -> 0 <---- dangling node/pointer !!! 0x9759008 -> 3 delete: 0x9759030 -> 1 delete: 0x9759058 -> 0 <---- object deleted again !!! delete: 0x9759008 -> 3
Note:
See TracTickets
for help on using tickets.
