스마트포인터는 객체다.
일반적인 포인터가 변수라면 스마트포인터는 객체로 나타낸다.
포인터에 스마트라는 단어가 접목된 이유는 스마트포인터를 사용하면 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
'테크 > 기초 지식' 카테고리의 다른 글
눈으로 보는 const 위치에 따른 의미 - 1번. 변수 선언 시, 제일 앞에 오는 const (0) | 2016.10.24 |
---|---|
동기와 비동기 방식에 대한 간단한 개요 였다가 의문 (3) | 2016.10.24 |
malloc() 과 new 연산자의 차이점 (0) | 2016.10.24 |
if문과 논리연산자로 인한 조건 검사 순서의 비밀 - 컴파일러 (0) | 2016.10.07 |
재귀와 반복 그리고 꼬리 재귀 (2) | 2016.08.21 |