id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 2338,sp_collector.cpp reports reachable objects as unreachable,Peter Dimov,Peter Dimov,"Jim Barry in http://lists.boost.org/boost-users/2008/09/40507.php: {{{ I am trying to detect circular references using the find_unreachable_objects function in sp_collector.cpp. However, it reports false positives in the simple case of one object being owned by another. To illustrate: #define BOOST_SP_ENABLE_DEBUG_HOOKS #include // sp_collector.cpp exported functions std::size_t find_unreachable_objects(bool report); struct X {}; struct Y { boost::shared_ptr pX; Y() : pX(new X) {} }; int main() { boost::shared_ptr y(new Y); find_unreachable_objects(true); return 0; } The output is as follows: ... 2 objects in m. ... 1 objects in m2. ... 1 objects in open. Unreachable object at 0036BA60, 12 bytes long. Clearly this is incorrect as there are no circular references. Looking at the code, there is what appears to be a typo at line 124: std::cout << ""... "" << m2.size() << "" objects in open.\n""; should be: std::cout << ""... "" << open.size() << "" objects in open.\n""; But the real problem seems to be at line 121: if(p->use_count() != i->second) open.push_back(p); I'm not entirely sure what's going on in this section of code, but it ends up determining (incorrectly) that the ""X"" object is unreachable. }}}",Bugs,closed,Boost 1.37.0,smart_ptr,Boost 1.36.0,Problem,fixed,,