템플릿을 이용해서 임의의 STRUCT (구조체) 를 저장하는 프로그램을 짤려고 합니다..
------------------------------------------------------------------------------------------
struct dataset{
int key;
T (* data);
dataset *prev;
dataset *next;
};
.....................................
struct app{
int a;
int b;
int c;
};
void main()
{
app p;
p.a = 1;
p.b = 2;
p.c = 3;
Data<app> aa;
aa.PUSH_BACK((void *)p,1);
}
............................................
void Data<class T>::PUSH_BACK(void *pdata,int key){
dataset<T> *temp;
temp = new dataset<T>;
temp->data=(T *)pdata;
temp->key = key;
temp->next = tail->prev->next;
temp->prev = tail->prev;
tail->prev->next = temp;
tail->prev = temp;
}
------------------------------------------------------------------------------------------
위 소스에서 인자 void *pdata 이 부분에 어느것을 넣어야 임의의 구조체를 인자로 넘길수 있나요?
방법이 틀렸다면, 어떻게 넘길수 있는지 방법좀 알려주세요. 또 넘긴 구조체를 temp->data 에 저장하는 방법도 알려주세요.. 위에 것은 틀린거 같아서요...
이렇게 하면 컴파일 에러는 안나지만 정상적인 실행은 보장할 수 없습니다. 인자로 넘어가는 main함수에서의 p가 동적할당 된것이 아닌, local 변수이기 때문에 main함수가 끝나는 동시에 할당이 해제되게 됩니다.
main 함수 끝나기 전에 모든 일을 다 한다면 당장은 문제가 안보일수 있지만, 저런 호출이 다른 함수 안에서 이루어진다면 그 함수가 끝난 다음에는 저 리스트 안에 있는 데이터는 날라가게 되겠죠. 잘못된 포인터만을 남긴채...
따라서 app p; 라고 선언하는 대신 add *p = new app 이런식의 동적 할당이 필요합니다. 물론 적당한 시점에서 delete 해줘야 하고요