NoPtr lib -- noptrlib.sourceforge.net
...I saw no mention of detecting dead cyclic object pools.
Can you give me a short example of how NoPtr would even need to detect that
to work correctly? I suspect that if you end up with cyclic object pool you
are using NoPtr incorrectly (just like passing a pointer to an auto variable
to a shared_ptr is incorrect use), but maybe an example will show me to be
wrong.
Oliver
Here's my example (from an earlier thread):
#include <boost/shared_ptr.hpp>
#include <iostream> using namespace boost;
using namespace std;struct B_impl;
struct B {
shared_ptr<B_impl> pimpl_;
}; struct A_impl {
A_impl() { cout << "new A\n"; }
~A_impl() { cout << "del A\n"; }
B b_;
}; struct A {
shared_ptr<A_impl> pimpl_;
B get_B() const { return pimpl_->b_; }
}; struct B_impl {
B_impl() { cout << "new B\n"; }
~B_impl() { cout << "del B\n"; }
A a_;
}; A get_A(const B& b) { return b.pimpl_->a_; }
B get_B(const A& a) { return a.pimpl_->b_; } A construct_A() {
A a;
a.pimpl_.reset(new A_impl); // a refcount is 1
B& b = a.pimpl_->b_;
b.pimpl_.reset(new B_impl); // b refcount is 1
b.pimpl_->a_ = a; // a refcount is 2 return a;
} int main() {
{
A a = construct_A();
}
// ex-a's refcount is still 1, so object doesn't die
}- Chuck
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
