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;