저번 글에 생성자가 객체 자체의 초기화외에 외부 환경까지
초기화 하기 때문에 객체가 사라질 떄 반대의 처리를 할 함수도
필요하다.
예를들어 다른 컴퓨텨와 연결했다면, 사라질 때 연결을 끊고 할당된 메모리도
반환해야 한다.
이러한 뒷처리를 하는 함수를 파괴자 라고 한다.
이 역시 객체가 소멸될 때 컴파일러가 자동으로 호출한다.
파괴자의 이름은 클래스 이름 앞에 ~를 붙인 것으로 고정되어 있으며
인수와 리턴 값은 가지지 않는다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <stdio.h> #include <stdlib.h> #include <string.h> class position { private: int x; int y; int *ptr; public: position(int ax = 0, int ay = 0) { x = ax; y = ay; ptr = NULL; } ~position() { if (ptr) { free(ptr); } puts("생성자 호출"); } void print() { printf("%d %d\n", x, y); } }; int main(void) { position a(10); a.print(); } | cs |
위와 같은 코드에서, ~position() 이 부분이 파괴자이다.
만약 ptr이 동적할당이 되었다면, 그 메모리를 반환하기 위해 free를 사용한다.
이렇듯 객체가 사라지고 난 후의 뒷 처리를 하는 함수를 파괴자라고 한다.