더북(TheBook)

3.6 | 포인터를 컨테이너에 저장하기

 

보통은 컨테이너에 객체보단 포인터를 저장하는 것이 더 좋고, 원시 포인터보단 스마트 포인터가 대부분은 더 좋다. 포인터를 컨테이너에 저장하는 이유는 다음과 같다.

컨테이너에 포인터를 저장한다는 것은 포인터가 가리키는 객체가 아니라 포인터가 복제된다는 뜻이다. 포인터 복제가 객체 복제보다 보통은 훨씬 더 빠르다.

컨테이너에 포인터를 저장하면 다형성(polymorphic behaviour)을 얻을 수 있다. 기반 타입의 원소를 가리키는 포인터를 저장할 수 있게 컨테이너를 정의하면 파생 타입 객체의 포인터도 저장할 수 있다. 공통 기반 클래스가 같은 다양한 객체의 순차열을 다룰 때 매우 유용하다. 이렇게 하는 가장 일반적인 예가 화면에 표시할 선, 곡선, 기하학 도형 같은 객체를 처리하는 것이다.

포인터를 저장한 컨테이너의 내용을 정렬하는 것이 객체를 정렬하는 것보다 빠르다. 객체가 아니라 포인터만 이동하면 되기 때문이다.

스마트 포인터를 저장하는 것이 원시 포인터를 저장하는 것보다 안전하다. 이는 스마트 포인터를 더는 참조하지 않을 때 자유 공간에 있는 객체가 자동으로 삭제되기 때문이다. 이렇게 하면 메모리 누수가 발생할까 걱정하지 않아도 된다. 어떤 것도 가리키지 않는 스마트 포인터는 기본으로 nullptr이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.