If you can access the value of the reference count, you could have your slot check to see if the reference count has dropped to 1
Actually, you mean I have to override object's release() method -- as this's the only piece of code that knows when ref.count drops to 1. I'm still not sure I understand how to make this solution thread-safe. Lets consider the following scheme: struct object { void init() { selfAncor_ = some_intrusive_ptr<object>(this); connection1_ = signal1_.connect(&handle, ref(selfAncor_)); connection2_ = signal2_.connect(&handle, ref(selfAncor_)); } int release() { do_release(); if (refcount_ == 1) { connection1_.disconnect(); connection2_.disconnect(); // the following line is unsafe, because some slot invocation might be in progress! selfAncor_.reset(); } } }; Thanks!