* The utility of this class is even enhanced by providing identifying strings
* to the functions subscribe() and unsubscribe(). In case of a hanging
* subscription during destruction, this string will be listed in the
- * exception's message. For reasons of efficiency, these strings are handled
- * as <tt>const char*</tt>. Therefore, the pointers provided to subscribe()
- * and to unsubscribe() must be the same. Strings with equal contents will not
- * be recognized to be the same. The handling in SmartPointer will take care
- * of this.
+ * exception's message. These strings are represented as <code>const char
+ * *</code> pointers since the underlying buffer comes from (and is managed
+ * by) the run-time type information system: more exactly, these pointers are
+ * the result the function call <code>typeid(x).name()<code> where
+ * <code>x</code> is some object. Therefore, the pointers provided to
+ * subscribe() and to unsubscribe() must be the same. Strings with equal
+ * contents will not be recognized to be the same. The handling in
+ * SmartPointer will take care of this.
*
- * @note Due to a problem with <tt>volatile</tt> declarations, this additional
- * feature is switched off if multithreading is used.
+ * @note This feature is switched off if multithreading is used (i.e., if
+ * <code>DEAL_II_WITH_THREADS</code> is on).
*
* @ingroup memory
* @author Guido Kanschat, 1998 - 2005
object_info = &typeid(*this);
++counter;
+ // This feature is disabled when we compile with threads: see the
+ // documentation of this class.
# ifndef DEAL_II_WITH_THREADS
const char *const name = (id != 0) ? id : unknown_subscriber;
--counter;
+ // This feature is disabled when we compile with threads: see the
+ // documentation of this class.
# ifndef DEAL_II_WITH_THREADS
map_iterator it = counter_map.find(name);
AssertNothrow (it != counter_map.end(), ExcNoSubscriber(object_info->name(), name));