00001 /******************************************************************************** 00002 * * 00003 * A u t o P o i n t e r H o l d e r * 00004 * * 00005 ********************************************************************************* 00006 * Copyright (C) 2002,2003 by Niall Douglas. All Rights Reserved. * 00007 * NOTE THAT I DO NOT PERMIT ANY OF MY CODE TO BE PROMOTED TO THE GPL * 00008 ********************************************************************************* 00009 * This code is free software; you can redistribute it and/or modify it under * 00010 * the terms of the GNU Library General Public License v2.1 as published by the * 00011 * Free Software Foundation EXCEPT that clause 3 does not apply ie; you may not * 00012 * "upgrade" this code to the GPL without my prior written permission. * 00013 * Please consult the file "License_Addendum2.txt" accompanying this file. * 00014 * * 00015 * This code is distributed in the hope that it will be useful, * 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * 00018 ********************************************************************************* 00019 * $Id: * 00020 ********************************************************************************/ 00021 00022 #ifndef FXPTRHOLD_H 00023 #define FXPTRHOLD_H 00024 00025 namespace FX { 00026 00062 template<class type> class FXPtrHold 00063 { 00064 type *ptr; 00065 public: 00066 FXPtrHold(type *p=0) throw() : ptr(p) { } 00067 ~FXPtrHold() { free(); } 00068 operator type *() throw() { return ptr; } 00069 operator const type *() const throw() { return ptr; } 00070 type *&operator->() throw() { return ptr; } 00071 type *&operator=(type *p) throw() { ptr=p; return ptr; } 00072 void free() { delete ptr; ptr=0; } 00073 }; 00074 00075 } // namespace 00076 00077 #endif