surely  in this dtor  the only thing we should be doing is asserting that m bdisposed is true  all the other logic belongs in dispose note that if you do this  you might need to make m bdisposed a std  atomic bool 