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 KStaticDeleterBase {
00040
public:
00041
virtual ~
KStaticDeleterBase() { }
00047
virtual void destructObject();
00048 };
00049
00066 template<
class type>
class KStaticDeleter :
public KStaticDeleterBase {
00067
public:
00068
KStaticDeleter() { deleteit = 0; globalReference = 0; array =
false; }
00077 KDE_DEPRECATED type *
setObject( type *obj,
bool isArray =
false) {
00078 deleteit = obj;
00079 globalReference = 0;
00080 array = isArray;
00081
if (obj)
00082 KGlobal::registerStaticDeleter(
this);
00083
else
00084 KGlobal::unregisterStaticDeleter(
this);
00085
return obj;
00086 }
00096 type *setObject( type* & globalRef, type *obj,
bool isArray =
false) {
00097 globalReference = &globalRef;
00098 deleteit = obj;
00099 array = isArray;
00100
if (obj)
00101 KGlobal::registerStaticDeleter(
this);
00102
else
00103 KGlobal::unregisterStaticDeleter(
this);
00104 globalRef = obj;
00105
return obj;
00106 }
00107
00112 virtual void destructObject() {
00113
if (globalReference)
00114 *globalReference = 0;
00115
if (array)
00116
delete [] deleteit;
00117
else
00118
delete deleteit;
00119 deleteit = 0;
00120 }
00121
virtual ~
KStaticDeleter() {
00122 KGlobal::unregisterStaticDeleter(
this);
00123
destructObject();
00124 }
00125
private:
00126 type *deleteit;
00127 type **globalReference;
00128
bool array;
00129 };
00130
00131
#endif