과제인 학생 관리 프로그램 떄문에 malloc를 이용해서 스택을 구현해서 완성은 했습니다.
그런데 사소한 고민거리가 하나 생겼네요...사소하지 않을 수도 있지만요-ㅅ-)
아무튼 소스 하나 보시고
CMallocStack::CMallocStack()
{
Size = 3;
Score = (int*)malloc(sizeof(int)*Size); //Size만큼 공간을 할당한다. 일단은-_-)~
Point = 0; //가리킬 포인트는 0;
}
void CMallocStack::Push(int aScore)
{
if ( Score == NULL ) //전체가 해지되면
CMallocStack(); //다시 할당한다.
if ( Point == -1 ) //언더플로우 상태였다면 1을 하나 증가시켜 0으로 만든다.
Point = 0;
if ( Point == Size ) { //오버플로우 상태라면
Size += 3; //5의 공간을 더 잡기 위해 사이즈를 조정
Score = (int*)realloc(Score, sizeof(int)*Size); //사이즈가 3늘어났다!
}
Score[Point++] = aScore;
}
에 소스가 이렇게 생겼습니다-ㅅ-)
제가 원하는 것은 어느 순간에 가면 Score를 free시키는 일이 있는데(학생의 데이터를 삭제할 때)
그곳에 다시 데이터를 Push하게 되면 그 Push한 데이터를 넣기 위해서 생성자를 다시 호출합니다.
에-ㅅ- 그래서 말인데요
생성자를 다시 호출하게 되면 안되는겁니까? 저렇게 소스를 작성했었는데 생성자를 호출하고도 Score에는 할당이 안되는군요
..아니 정확히 말하면 Push의 Score와 생성자의 Score가 다른 변수로 취급 당합니다.
얼핏 생각으로는 this와 관계된 것 같은데 정확한 이유는 모르겠습니다. 조언 부탁드리겠습니다.
if ( Score == NULL ) //전체가 해지되면
CMallocStack(); //다시 할당한다.
if( Score == NULL )
{
CMallocStack kTempStack;
}
이런 의미입니다. 즉 임시객채를 생성한것 밖에 안되는 것이죠...생성자는 변수를 생성하는것외에는 의미가 없습니다.
별도의 Clear()나 Alloc()등으로 함수를 만들어서 호출해주시는게 좋습니다.