스마트포인터객체다.


일반적인 포인터가 변수라면 스마트포인터는 객체로 나타낸다. 


포인터에 스마트라는 단어가 접목된 이유는 스마트포인터를 사용하면 2가지의 큰 이점이 있다.


1. 버그 예방

2. 코드 길이 감소


두 이점 중에서 중요하지 않은 것이 없다.


그리고 버그 예방이라는 측면에서 먼저 봐야할 것은 이렇다.


C/C++언어에서 발생하는 대표적인 오류 케이스는 다음과 같다.

1. 메모리 누수

2. 할당 실패

3. Dangling 포인터


스마트포인터는 이 3가지 경우에 관련된 버그등을 예방하고 일반 포인터를 사용할 경우 이런 예방 처리를 해야 할

코드를 줄임으로서 전체적인 코드 길이가 줄어들어 그 명료함과 가독성역시 뛰어나진다.


먼저 맨 앞에 기술했듯이 스마트포인터는 객체이다. 

객체이기 때문에 생성자와 소멸자를 가진다.


생성자와 소멸자가 있기 때문에 포인터를 사용할 때 반드시 작성해야 할 방어적 프로그래밍인 초기화와 해제를 

프로그래머가 해줄 필요없이 자동으로 이 부분들을 처리해준다.


그렇기에 메모리 할당 후 처리가 끝난 후에 해제가 되지 않아 일어나는 '메모리 누수' 현상과

이미 메모리에서 해제된 주소를 가리키는 현상인 'Dangling 포인터' 현상을 일어나지 않게 만든다.



결론적으로 스마트포인터는 C++코딩에서 더욱 안전하고 더욱 효율적인 코드를 작성하게 해준다.


이를 사용하고 더욱 완벽한 이해를 위해선 Alexandrescu가 집필한 Modern C++ Design의 스마트포인터 챕터를 읽어보자.



*정말 잊지말아야 할 부분: 스마트포인터는 Garbage Collector가 없는 C/C++언어에서 메모리 해제를 담당.


출처: http://ootips.org/yonat/4dev/smart-pointers.html



+ Recent posts