[C++] 약한(Weak) 포인터
카테고리: Cpp
이 글은 C++의 약한(Weak) 포인터을 공부하고 정리한 글입니다.
약한 포인터는 원시 포인터의 해제에 영향을 끼치지 않는 포인터로 강한 참조 카운터가 0이 될 때 소멸된다.
약한 포인터(weak_ptr)
- 약한 참조를 사용한다
- 약한 참조 카운트를 늘림
- 약한 포인터로 원시 포인터의 해제에 영향을 끼치지 않는다
-
약한 참조로 참조되는 개체는 강한 참조 카운터가 0이 될 때 소멸된다
코드 예시
#include <memory> #include "Person.h" int main() { std::shared_ptr<Person> owner = std::make_shared<Person>("Reoul"); std::weak_ptr<Person> weakOwner = owner; std::shared_ptr<Person> lockedOwner = weakOwner.lock(); return 0; }
약한 참조
- 약한 참조는 원시 포인터 해제에 영향을 끼치지 않음
- 약한 참조 카운트는 약한 참조의 수를 저장하는 데 사용됨
- 약한 참조로 참조되는 개체는 강한 참조 카운터가 0이 될 때 소멸됨
- 순환 참조 문제의 해결책
lock()
std::shared_ptr<T> lock() const noexcept;
- 원시 포인터가 존재하면 공유 포인터를 만든다
- 약한 포인터를 사용하려면 무조건 lock()을 해 공유 포인터로 만들어서 소멸되는 것을 막아야한다
std::shared_ptr<Person> lockedOwner = weakOwner.lock();
expired()
bool expired() const noexcept;
- 공유 포인터가 해제되었으면 true를 반환한다
bool bIsExpired = weakOwner.expired();
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기