$extrastylesheet
00001 // The libMesh Finite Element Library. 00002 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 00003 00004 // This library is free software; you can redistribute it and/or 00005 // modify it under the terms of the GNU Lesser General Public 00006 // License as published by the Free Software Foundation; either 00007 // version 2.1 of the License, or (at your option) any later version. 00008 00009 // This library is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 // Lesser General Public License for more details. 00013 00014 // You should have received a copy of the GNU Lesser General Public 00015 // License along with this library; if not, write to the Free Software 00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 00018 00019 00020 #ifndef LIBMESH_REFERENCE_COUNTED_OBJECT_H 00021 #define LIBMESH_REFERENCE_COUNTED_OBJECT_H 00022 00023 // Local includes 00024 #include "libmesh/reference_counter.h" 00025 00026 // C++ includes 00027 #include <typeinfo> 00028 00029 namespace libMesh 00030 { 00031 00032 00033 00066 // ------------------------------------------------------------ 00067 // ReferenceCounter class definition 00068 template <typename T> 00069 class ReferenceCountedObject : public ReferenceCounter 00070 { 00071 protected: 00072 00078 ReferenceCountedObject () 00079 { 00080 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG) 00081 00082 increment_constructor_count(typeid(T).name()); 00083 00084 #endif 00085 } 00086 00090 ReferenceCountedObject (const ReferenceCountedObject& other) 00091 : ReferenceCounter(other) 00092 { 00093 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG) 00094 00095 increment_constructor_count(typeid(T).name()); 00096 00097 #endif 00098 } 00099 00100 public: 00101 00105 ~ReferenceCountedObject () 00106 { 00107 #if defined(LIBMESH_ENABLE_REFERENCE_COUNTING) && defined(DEBUG) 00108 00109 increment_destructor_count(typeid(T).name()); 00110 00111 #endif 00112 } 00113 00114 private: 00115 00116 }; 00117 00118 00119 } // namespace libMesh 00120 00121 00122 #endif // LIBMESH_REFERENCE_COUNTED_OBJECT_H