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