|
class Object
{
public:
Object() { printf("생성자가 호출되었습니다\n"); }
virtual ~Object() { printf("해제자가 호출되었습니다\n"); }
};
void main()
{
Object* object1 = new Object;
Object* object2 = new Object;
std::list<Object*>* objectList;
objectList->push_back(object1);
objectList->push_back(object2);
delete objectList; <- 여기에서 object1, object2를 자동으로 해제하고 싶습니다.
// delete object1;
// delete object2;
}
template는 본지 얼마 되지 않아서, 사용하는데 아직 초짜라 질문을 올려 봅니다. std::list를 내부적으로 살펴 보니 call by reference 이더군요. iterator는 그 item의 pointer type을 가지는 것이구요(이것 알아 내는데도 시간이 오래 걸려습니다 ㅠㅠ).
제가 하고 싶은 것은 list클래스내부에서 item이 빠져 나갈때(erase, pop_back, pop_front 등등), 객체를 해제(destructor를 호출)시켜 주고 싶다는 것입니다.
물론 item을 빼 낼 때 널리 알려진 메소드(rease, pop_back, pop_front등)을 사용하지 않고, erase_free, pop_back_free, pop_front_free, clear_free 등을 일일이 구현하면 되겠지만, 혼자 다 구현하려고 하니 영 찝찝하다는 생각이 들구요. erase 메소드가 virtual이었다면 이놈을 상속받아서 객체를 해제시켜 주는 코드를 넣으면 좋으련만... 쩝...
std::list 클래스를 사용하려고 하다가, 결국 현재는 자체적인 List 라는 클래스를 만들어서 사용하고 있습니다. 제가 개인적으로 사용하기에는 편하기는 한데, list는 범용적으로 사용된는 클래스라서 가급적이면 표준 library를 사용하고 싶군요.
질문의 요지는
1. list 클래스에서 item 타입은 객체의 pointer이다.
2. list 클래스에서 item을 빼 내는 메소드가 호출될 때 옵션(예를 들면 bool autoFree)에 의해서 item의 해제자를 불려 주게 하고 싶다.
가 되겠습니다. ^^
ps: 데브피아에는 ActiveX 문제때문에 글을 못 올리네요. 짜증나는 데브피아... AcitveX를 걷어 내라, 걷어 내라!!!
|