The ContactListener seems to prefer to be destroyed than to continue to handle signals when not required.  I guess it is assuming that the cost of destruction/re-construction is lower than the overhead otherwise induced?