STL_벡터를 이용하여 생성자, 소멸자 및 재할당 확인하기.

(마크된 클래스를) 벡터를 이용하여 생성자, 소멸자 및 재할당 확인하기.

 

1일반 객체를 사용할 경우

 

        생성자를 정상적으로 호출하지만 소멸자에서는 정상적으로 호출 되지 않고 에러를 발생한다. 그 이유는 벡터에 push 될 때 복사생성자가 발생한다. 이 복사생성자를 오버로딩하여 깊은 복사를 하지 않게 되면 J1DArray 객체의 포인터 변수인 m_buffer을 같이 가리키게 된다. 이 이후에 객체가 소멸될 때 처음 한 번은 객체의 메모리를 정상적으로 반납하지만 그 이후에는 메모리를 잃은 주소를 참조하여 제거를 시도하기 때문에 에러가 발생한다. 게다가 벡터는 push 할 경우 재할당이 이루어지기 때문에 애초에 주소값을 잃어버리게 된다. 마지막으로 추가된 객체의 소멸자는 정상적인 주소값을 갖고 있기 때문에 문제가 없지만 그 이후의 객체들은 주소값을 잃어버렸기 때문에 정상적인 제거가 불가능하다.

 


 


 

 

2.포인터를 사용할 경우

 

        포인터를 사용할 경우에는 push가 되든 재할당이 이루어지든 자신의 메모리 주소값만을 참조하기 때문에 정상적으로 생성자 소멸자가 이루어지게 된다. 하지만 동적할당한 객체를 일일이 제거 해 주어야 소멸자가 호출된다. 또 포인터가 더 빠르다.



이 글을 공유하기

댓글

Designed by JB FACTORY