이 수업 마지막에 lock() 이용해서 getname 하는 부분 질문입니다.
#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함수는 자신이 속한 객체 이외에 공동으로 소유중인 또 다른 객체를 리턴한다로 이해해도 되겠습니까? 답변 부탁드립니다. 감사합니다.