더북(TheBook)

3.6.1 순차열 컨테이너에 포인터 저장하기

컨테이너에 원시 포인터를 저장할 때 발생할 수 있는 문제부터 설명하고 이어서 스마트 포인터를 사용하는 것을 설명하겠다. 표준 입력 스트림에서 단어들을 읽고, 자유 공간에 있는 string 객체에 대한 포인터를 vector 컨테이너에 저장하는 코드부터 살펴보자.

std::vector<std::string*> words;
std::string word;
std::cout << “Enter words separated by spaces, enter Ctrl+Z on a separate line to end:\n;
while (true)
{
  if ((std::cin >> word).eof())
  {
    std::cin.clear();
    break;
  }
  words.push_back(new std::string {word}); // 객체를 생성하고 주소를 저장한다
}

push_back() 인수에 사용한 표현식은 자유 공간에 string 객체를 생성하는 것이므로 push_back() 인수에는 객체의 주소가 사용된다. 따라서 객체의 주소가 저장된 words 벡터의 내용을 출력하려면 다음과 같이 작성해야 한다.

for (auto& w : words)
  std::cout << w << ” “;
std::cout << std::endl;
 

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