[C] gcc/c 비표준 확장 cleanup으로의 소멸자 구현

[원본 링크]

이게 무엇인고 하면, 변수가 스코프를 벗어나면, 지정된 함수를 호출해주는 놈이다.

리소스 획득이 초기화(RAII) 방식을 적용해서 누수를 줄일 수 있다는 말이다.

사용법은 이렇다. image

image 데이터에 해당하는 소멸자 함수를 만들어줘야한다.

선언할 변수의 타입이 int*니까 이걸 핸들링할수 있게 하도록, 인자타입은 포인터인 int**여야한다.

그리고 저렇게 변수를 선언하면서 그 앞에 속성을 저렇게 달아주면 다 된거다.

그럼 main이 종료되고 int* a가 삭제되면서, free_int가 호출되어 힙 메모리가 정리된다.

위에서는 int* a라는 지역변수 자체에 속성이 적용된다는 것을 강조하기 위해서 초기화를 분리해놨는데, 그냥 선언하면서 malloc으로 초기화해줘도 된다.


꼭 동적할당에만 사용할수 있는것도 아니다. 그냥 변수에도 적용할 수 있다.
이렇게 image

image


아마 gcc의 확장을 잘 승계한 clang에서도 돌아갈것으로 생각된다.(뇌피셜)

msvc/c에서도 __try와 __finally를 응용하면 소멸자 구현이 가능한듯싶다.