개념
TClonesArray 클래스는 TObjArray를 상속하는 TObject의 배열이다. TObjArray와 다른점은, 여러 클래스를 담을 수 있는 TObjArray와 달리 단 하나의 클래스만 담을 수 있다는 점이다. 이런 점을 이용해서 데이터를 저장할 때 메모리 관리와 시간적인 측면에서 엄청난 효율을 자랑한다.
정의
TClonesArray의 생성자는 TClonesArray("[클래스 이름]", 크기) 이며 [클래스 이름]은 배열에 들어가는 클래스의 이름, 크기는 배열의 초기 크기를 의미한다.
TObjArray에서 언급한 것과 같이 배열의 크기는 필요할때 자동으로 늘어난다
TApple 클래스를 다음과 같이 정의하고,
class TApple : public TObject { public: void SetSize(Int_t size) { fAppleSize = size; }; Int_t GetSize() { return fAppleSize; } private: Int_t fAppleSize; };
TApple 클래스를 담는 크기 4의 배열, TClonesArray 를 만들어 보자.
TClonesArray *array = new TClonesArray("TApple",4);
TApple 0 |
TApple 1 (nullptr) |
TApple 2 (nullptr) |
TApple 3 (nullptr) |
추가
처음 TClonesArray를 만들면 모든 TApple은 nullptr값을 가진다. 가령 n번째 TApple을 생성하고 가져올 때는 ConstructedAt(Int_t i) 함수를 사용한다.
TApple *apple = (TApple *) array -> ConstructedAt(0);
TApple 0 |
TApple 1 (nullptr) |
TApple 2 (nullptr) |
TApple 3 (nullptr) |
이때 ConstructedAt(0)을 불러오면 첫번째 칸에 있는 "TApple 0"을 가져오되 nullptr 값을 가진다면 TApple을 생성한다. TObject를 가져올때는 TObjArray와 마찬가지로 At(Int_t i) 함수를 사용한다.