3.6 | 포인터를 컨테이너에 저장하기
보통은 컨테이너에 객체보단 포인터를 저장하는 것이 더 좋고, 원시 포인터보단 스마트 포인터가 대부분은 더 좋다. 포인터를 컨테이너에 저장하는 이유는 다음과 같다.
• 컨테이너에 포인터를 저장한다는 것은 포인터가 가리키는 객체가 아니라 포인터가 복제된다는 뜻이다. 포인터 복제가 객체 복제보다 보통은 훨씬 더 빠르다.
• 컨테이너에 포인터를 저장하면 다형성(polymorphic behaviour)을 얻을 수 있다. 기반 타입의 원소를 가리키는 포인터를 저장할 수 있게 컨테이너를 정의하면 파생 타입 객체의 포인터도 저장할 수 있다. 공통 기반 클래스가 같은 다양한 객체의 순차열을 다룰 때 매우 유용하다. 이렇게 하는 가장 일반적인 예가 화면에 표시할 선, 곡선, 기하학 도형 같은 객체를 처리하는 것이다.
• 포인터를 저장한 컨테이너의 내용을 정렬하는 것이 객체를 정렬하는 것보다 빠르다. 객체가 아니라 포인터만 이동하면 되기 때문이다.
• 스마트 포인터를 저장하는 것이 원시 포인터를 저장하는 것보다 안전하다. 이는 스마트 포인터를 더는 참조하지 않을 때 자유 공간에 있는 객체가 자동으로 삭제되기 때문이다. 이렇게 하면 메모리 누수가 발생할까 걱정하지 않아도 된다. 어떤 것도 가리키지 않는 스마트 포인터는 기본으로 nullptr이다.