Boost logo

Boost :

From: Valentin Samko (boost_at_[hidden])
Date: 2005-10-02 12:11:48


Why is the shared counter used to compare shared_ptr objects, and not
the container pointer?

Until revision 1.24, the container pointer was used to compare
shared_ptr objects, see
http://cvs.sourceforge.net/viewcvs.py/boost/boost/boost/shared_ptr.hpp?r1=1.23&r2=1.24 .

This introduced a change in shared_ptr behaviour and introduced a case
where (p1 < p2 && p1 == p2) is true where p1 and p2 are two shared
pointers, see the included example.

Was this change in behaviour intentional, and is this behaviour documented
anywhere?

Example:
 struct A {};
 struct deleter1 { template<class T> void operator()(T*) const {} };
 struct deleter2 { template<class T> void operator()(T*) const {} };

 int main()
 {
  A* a = new A();
  boost::shared_ptr<A> p1(a, deleter1());
  boost::shared_ptr<A> p2(a, deleter2());
  std::cout << "p1 < p2 = " << (p1 < p2) << std::endl ;
  std::cout << "p1 == p2 = " << (p1 == p2) << std::endl ;
 }
Output:
 p1 < p2 = 1
 p1 == p2 = 1

--
Valentin Samko - http://val.samko.info

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk