|
일단 제가 알기론 그런경우 전역변수로 선언해야 되는게 맞습니다만,
질문 한 이유가 '자잘한 전역변수가 많아지는게 보기싫다' 라고 생각되어 적어봅니다.
만약 그런 경우라면 TList를 사용하는 방법이 있습니다.
TList는 모든 type의 포인터를 담을수 있으니까요.
대신 TList에 어떤게 담겨있는지 구별하는 변수정도는 있어야겠죠.
예를 들어 List_GlobalClass 라는 TList 를 선언하고, 여기에 담아서 쓰려는 객체가 A, B 두개 일때,
vector<unsigned char> ListType;
이런식으로 따로 가변 배열을 전역 변수로 선언해서 (만약 객체의 갯수가 256 개가 넘는다면, unsigned short로...)
List_GlobalClass->Add(A);
ListType.push_back(0);
List_GlobalClass->Add(B);
ListType.push_back(1);
이런식으로 구분하면, 두개의 전역변수(TList, vector)로 모든 type의 변수를 Control (생성, 사용, 해제) 할 수 있는거죠.
TList에서 포인터를 꺼내 쓸때 자료형을 확인하는 방법이 존재하는지 몰라서 따로 vector를 써야되겠다는 거고
만약 존재한다면 이런 뻘짓은 안해도 될것 같네요.
(생각 해보니 TObject를 상속받은 class 라면 TObject*로 캐스팅해서 ClassName() 함수를 호출해도 되긴 하겠군요...)
어쨋든, 질문의 의도에 부합했는지 모르겠네요.
P.S.
작성자가 아니더라도 제가 적은 내용에 오류가 있으면 지적을 해주시기 바랍니다.
질게에 답변을 다는 가장 큰 이유가 제가 공부하기 위해서 입니다.
답변을 달기 위해선 '정확'해야 되니까, 여기저기 찾아보고 실제로 구현해보고 하면서 얻는게 많거든요.
헌데, 잘못된 지식을 퍼트리거나, 잘못된지 모르고 있는건 큰 문제잖아요.
그러니 문제가 있는 내용이다 싶으면 귀찮으시더라도 부디 꼭! 지적을 해주시기 바랍니다.
만나바 님이 쓰신 글 :
: 메소드에서 new를 통해 컴포넌트 객체를 생성한다음에 메모리를 해제할려면
: 해당 메소드 안에서 메모리를 해제 해야되는걸로 알고 있는데 해당 메소드 안에서 객체의
: 메모리를 해제하면 메소드 호출시 해당 컴포넌트 객체가 바로 삭제되는거자나요.
: 지역변수처럼 선언된 객체를 해제 하려면 어떻게 해야할까요? ( 변수들을 다 전역변수로 선언해야할까요?)다 전역변수로 선언해야할까요?)
|