|
아래 소스 는 어떤 강좌에서 추출한 헤더 내의 소스입니다.
그런데, 클래스 생성시 내용에 문의점이 있어 글올립니다.
<<<<<<<<< --------- ***** 이 부분이 이해가 안갑니다.
상기와 같은 표현으로 제 궁금증을 유발하는 문구를 표시하였습니다.
1.
어떻게 T 라는 데이터 형이 있는지요?
그게 무슨 데이터 형인지요?
2.
__property 라는 문구가 쓰였을 때와 안쓰였을 때의 차이점은?
3.
ZeroMemory(p, sizeof(T) * SIZE); 라는 문구에서 곱하기 SIZE 하는 것은 뭐죠?
//---------------------------------------------------------------------------
#ifndef TnewH
#define TnewH
//---------------------------------------------------------------------------
// Template new
// delete 가 필요없는 스마트 new.
// 메모리를 힙에 할당받고 자동으로 속은 0로 초기화 한다.
// 그러므로, 기본형과 String 외 typename T가 생성자를 거친후 0으로 초기화 되면 안되는 클래스를 사용하면 안되나,
// 사용해야 할때는 생성자에서 ZeroMemory가 동작하지 않아야 하므로 생성자(크기,false) 를 인자로 준다.
// 참고:String, TStringList, TList 는 생성된 직후 메모리가 모두 0이므로, 0으로 재초기화 가능하지만 일부러 그럴 필요없다.
//
// Written by 김태성 cppbuilder@naver.com
template<typename T>
class Tnew
{
private:
T *p; <<<<<<<<< --------- ***** 이 부분이 이해가 안갑니다.
int m_Size;
public:
__property int Count = { read = m_Size }; <<<<<<<<< --------- ***** 이 부분이 이해가 안갑니다.
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; }
};
//---------------------------------------------------------------------------
#endif
|