#ifndef __AUTOPTR_KTS_H #define __AUTOPTR_KTS_H //--------------------------------------------------------------------------- // ÃÊ°£´Ü ½º¸¶Æ®Æ÷ÀÎÆ® // AutoPtr·Î ¼±¾ðÇÑ °´Ã¼ÀÇ ¿ø·¡ ¸â¹ö ÂüÁ¶´Â -> ·Î ÇÑ´Ù. // ´ÜÀÏ °´Ã¼ »ý¼º ¹× ¼Ò¸êÀ» ÀÚµ¿ °ü¸®ÇϹǷÎ, ¿ëµµ¿¡ ¸Â°Ô ½á¾ß ÇÑ´Ù. // // KTS. template class AutoPtr { public: T *Ptr; // º»·¡ÇüÀ» È®½ÇÈ÷ ÀνĽÃų ¶§. instance->ptr À» ¹Ù·Î ¾²¸é µÈ´Ù. public: AutoPtr(T * p) : Ptr(p) { } ~AutoPtr() { delete Ptr; } T * operator->() { return Ptr; } // º»·¡ °´Ã¼ÀÇ Æ÷ÀÎÆ® ÂüÁ¶. T & operator*() { return *Ptr; } // º»·¡ °´Ã¼ÀÇ ³»¿ë ÂüÁ¶. operator T*() { return Ptr; } // º»·¡ °´Ã¼ÇüÀÌ ¿ä±¸µÇ´Â °ÍÀº ÀÚµ¿ ÂüÁ¶µÇ°Ô. }; // ÀÌ°Ç ¹è¿­ °´Ã¼¿ë. // ¸Þ¸ð¸® ÇØÁ¦ÇÒ¶§ ¹è¿­ ÇØÁ¦°¡ µÇµµ·Ï. template class AutoArrayPtr { public: T *Ptr; // º»·¡ÇüÀ» È®½ÇÈ÷ ÀνĽÃų ¶§. instance->ptr À» ¹Ù·Î ¾²¸é µÈ´Ù. public: AutoArrayPtr(T * p) : Ptr(p) { } ~AutoArrayPtr() { delete[] Ptr; } T * operator->() { return Ptr; } // º»·¡ °´Ã¼ÀÇ Æ÷ÀÎÆ® ÂüÁ¶. T & operator*() { return *Ptr; } // º»·¡ °´Ã¼ÀÇ ³»¿ë ÂüÁ¶. operator T*() { return Ptr; } // º»·¡ °´Ã¼ÇüÀÌ ¿ä±¸µÇ´Â °ÍÀº ÀÚµ¿ ÂüÁ¶µÇ°Ô. }; // ex: // AutoArrayPtr buffer(new byte[MaxSize]); // ¼±¾ð½Ã´Â * Æ÷ÀÎÅÍ´Â »©°í Çü¸¸ ±âÀçÇÑ´Ù. // AutoPtr stm(new TMemoryStream()); //--------------------------------------------------------------------------- #endif