이 수업 마지막에 lock() 이용해서 getname 하는 부분 질문입니다.
미해결
홍정모의 따라하며 배우는 C++
#include <iostream> #include <memory> #include <string> class Person { std::string m_name; //std::shared_ptr<Person> m_partner; std::weak_ptr<Person> m_partner; // ⭐⭐⭐ public: Person(const std::string& name) : m_name(name) { std::cout << m_name << " created\n"; } ~Person() { std::cout << m_name << " destroyed\n"; } friend bool partnerUp(std::shared_ptr<Person>& p1, std::shared_ptr<Person>& p2) { if (!p1 || !p2) return false; p1->m_partner = p2; p2->m_partner = p1; std::cout << p1->m_name << " is partnered with " << p2->m_name << "\n"; return true; } const std::shared_ptr<Person> getPartner() const // ⭐⭐⭐ { return m_partner.lock(); // ⭐⭐ lock 함수 실행 } const std::string& getName() const { return m_name; } }; int main() { auto lucy = std::make_shared<Person>("Lucy"); auto ricky = std::make_shared<Person>("Ricky"); partnerUp(lucy, ricky); std::cout << lucy->getPartner()->getName() << std::endl; return 0; } 수업 중 마지막 코드 입니다. std::cout << lucy->getPartner()->getName() << std::endl; 이 부분을 통해 Ricky를 출력하게 되는 과정을 다음과 같이 해석했는데 제가 해석한게 맞는지 확인 부탁드립니다. lucy->getPartner() 에서 lucy객체의 멤버 변수이자 weak_ptr인 m_partner의 lock()함수 호출 한편 m_partner를 ricky라는 객체 역시 소유하고 있음(partnerUp함수로 인해) 따라서 lock()는 ricky객체를 shared_ptr로 임시 변환해서 리턴 오로지 weak_ptr로는 소유하고 있는 객체의 멤버에 접근하는 것이 불가능했지만 lucy->getPartner() 이런 방식으로 ricky라는 객체를 리턴하였고 따라서 ricky라는 객체의 맴버함수 및 맴버변수에 접근할 수 있게 되었다. 1.저 코드 한줄에 대한 제 해석이 맞는지 확인 부탁드리고 2.혹시 lock()함수가 lucy객체의 멤버 함수지만 리턴한건 해당 객체의 멤버 변수(여기선 m_partner)를 해당 객체인 lucy객체와 공동으로 소유중인 ricky객체를 리턴했는데 그렇다면 lock함수는 자신이 속한 객체 이외에 공동으로 소유중인 또 다른 객체를 리턴한다 로 이해해도 되겠습니까? 답변 부탁드립니다. 감사합니다.
- c++
- weak_ptr
- lock함수
- 스마트포인터





