00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef _KSTATIC_DELETER_H_
00024
#define _KSTATIC_DELETER_H_
00025
00026
#include <kglobal.h>
00027
00039 class KDECORE_EXPORT KStaticDeleterBase {
00040
public:
00041
virtual ~KStaticDeleterBase() { }
00047
virtual void destructObject();
00048 };
00049
00074 template<
class type>
class KStaticDeleter :
public KStaticDeleterBase {
00075
public:
00076
KStaticDeleter() { deleteit = 0; globalReference = 0; array =
false; }
00085 KDE_DEPRECATED type *
setObject( type *obj,
bool isArray =
false) {
00086 deleteit = obj;
00087 globalReference = 0;
00088 array = isArray;
00089
if (obj)
00090 KGlobal::registerStaticDeleter(
this);
00091
else
00092 KGlobal::unregisterStaticDeleter(
this);
00093
return obj;
00094 }
00104 type *setObject( type* & globalRef, type *obj,
bool isArray =
false) {
00105 globalReference = &globalRef;
00106 deleteit = obj;
00107 array = isArray;
00108
if (obj)
00109 KGlobal::registerStaticDeleter(
this);
00110
else
00111 KGlobal::unregisterStaticDeleter(
this);
00112 globalRef = obj;
00113
return obj;
00114 }
00115
00120 virtual void destructObject() {
00121
if (globalReference)
00122 *globalReference = 0;
00123
if (array)
00124
delete [] deleteit;
00125
else
00126
delete deleteit;
00127 deleteit = 0;
00128 }
00129
virtual ~
KStaticDeleter() {
00130 KGlobal::unregisterStaticDeleter(
this);
00131
destructObject();
00132 }
00133
private:
00134 type *deleteit;
00135 type **globalReference;
00136
bool array;
00137 };
00138
00139
#endif