더북(TheBook)

컨테이너에 이들 타입 객체에 대한 포인터를 저장하는 프로그램은 다음과 같다.

// Ex3_06.cpp
// 베이스 포인터를 저장하는 컨테이너에 파생 클래스 객체를 저장하는 예제
#include <iostream>               // 표준 스트림
#include <memory>                 // 스마트 포인터
#include <vector>                 // 벡터 컨테이너
#include "Box.h"
#include "Carton.h"
using std::unique_ptr;
using std::make_unique;
 
int main()
{
  std::vector<unique_ptr<Box>> boxes;
  boxes.push_back(make_unique<Box>(1, 2, 3));
  boxes.push_back(make_unique<Carton>(1, 2, 3));
  boxes.push_back(make_unique<Carton>(4, 5, 6));
  boxes.push_back(make_unique<Box>(4, 5, 6));
  for(auto&& ptr : boxes)
    std::cout << *ptr << " volume is " << ptr->volume() << std::endl;
}

크게 설명이 필요한 코드는 아니다. vectorstd::unique_ptr<Box> 타입을 원소로 저장하므로 Box 객체에 대한 스마트 포인터를 저장하거나 Box를 기반 클래스로 하는 타입으로 만든 객체에 대한 스마트 포인터를 저장할 수 있다. boxes 컨테이너에는 push_back() 멤버를 호출해서 Box 객체와 Carton 객체에 대한 스마트 포인터를 저장한다. 여기서 push_back() 멤버는 우측값 참조 매개변수 버전이 호출된다. using 지시자를 사용해 코드의 가독성을 높였다. vector에 저장된 원소가 가리키는 각 객체의 상세 정보는 범위 기반 for 루프로 출력한다. for 루프에서 ptr로 추론되는 타입은 우측값이 된다.

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