//--------------------------------------------------------------------------- #ifndef TTClassH #define TTClassH //--------------------------------------------------------------------------- // Template Smart Class // // Written by 김태성 cppbuilder@naver.com //--------------------------------------------------------------------------- // Template new // delete 가 필요없는 스마트 new. // 메모리를 힙에 할당받고 자동으로 속은 0로 초기화 한다. // 그러므로, 기본형과 String 외 typename T가 생성자를 거친후 0으로 초기화 되면 안되는 클래스를 사용하면 안되나, // 사용해야 할때는 생성자에서 ZeroMemory가 동작하지 않아야 하므로 생성자(크기,false) 를 인자로 준다. // 참고:String, TStringList, TList 는 생성된 직후 메모리가 모두 0이므로, 0으로 재초기화 가능하지만 일부러 그럴 필요없다. // template class Tnew { private: int m_Size; public: T *p; __property int Count = { read = m_Size }; // read only public: Tnew(int SIZE, bool bClear = true) { p = new T[SIZE]; if (bClear) ZeroMemory(p, sizeof(T) * SIZE); m_Size = SIZE; } ~Tnew() { delete[] p; } Tnew& operator=(Tnew& src) { delete[] p; p = new T[src.Count]; memcpy(p, (T *)src, src.Count * sizeof(T)); m_Size = src.Count; return *this; } T* operator->() { return p; } T& operator*() { return *p; } operator T*() { return p; } }; //--------------------------------------------------------------------------- // 일반적인 VCL 스타일 클래스를 정적으로 생성하는 템플릿 클래스 // 단, 생성자의 인자를 TComponent 로 하는 클래스이어야 함. // 모든 컴포넌트와 폼 등의 수많은 VCL Style 클래스가 해당됨. template class TTVCL { public: T *p; public: TTVCL(TComponent *Owner) { p = new T(Owner); } ~TTVCL() { delete p; } T* operator->() { return p; } T& operator*() { return *p; } operator T*() { return p; } }; //--------------------------------------------------------------------------- // 일반적인 VCL 스타일 클래스를 정적으로 생성하는 템플릿 클래스 // 생성자의 인자를 가지지 않는 클래스만 사용할 수 있다. // TStringList, TList 등... template class TTClass { public: T *p; public: TTClass() { p = new T; } ~TTClass() { delete p; } T* operator->() { return p; } T& operator*() { return *p; } operator T*() { return p; } }; //--------------------------------------------------------------------------- #endif