반응형
약한 참조
약한 참조는 원시 포인터 해제에 영향을 끼치지 않습니다. 약한 참조 카운트는 약한 참조의 수를 저장하는 데 사용됩니다. 약한 참조로 참조되는 개체는 강한 참조 카운트가 0이 될 때 소멸됩니다. 순환 참조 문제의 해결책입니다.
#include <memory>
#include "Persion.h"
int main()
{
std::shared_ptr<Persion> owner = std::make_shared<Persion>("pp");
std::weak_ptr<Persion> weakOwner = owner;
return 0;
}
약한 포인터로 공유 포인터 만들기
#include <memory>
#include "Persion.h"
int main()
{
std::shared_ptr<Persion> owner = std::make_shared<Persion>("pp");
std::weak_ptr<Persion> weakOwner = owner;
std::shared_ptr<Persion> lockedOwner = weakOwner.lock();
return 0;
}
원시 포인터가 존재하면 공유 포인터를 만듭니다.
공유 포인터가 존재하는 지 확인하기
#include <memory>
#include "Persion.h"
int main()
{
std::shared_ptr<Persion> owner = std::make_shared<Persion>("pp");
std::weak_ptr<Persion> weakOwner = owner;
auto ptr = werOwner.lock();
if (ptr == nullptr)
{
//
}
return 0;
}
#include <memory>
#include "Persion.h"
int main()
{
std::shared_ptr<Persion> owner = std::make_shared<Persion>("pp");
std::weak_ptr<Persion> weakOwner = owner;
if (weakOwner.expired())
{
// ...
}
return 0;
}
#include <memory>
#include "Persion.h"
int main()
{
std::shared_ptr<Persion> owner = std::make_shared<Persion>("pp");
std::weak_ptr<Persion> weakOwner = owner;
owner = nullptr
if (weakOwner.expired()) // true 반환
{
// ...
}
return 0;
}
약한 참조와 강한 참조의 개념을 잘 잡은 다음, 스마트 포인터를 적절하게 활용한다면, 더욱 안전한 프로그램을 만들 수 있을 것이라는 생각이 들었습니다.
반응형
'SW > C++' 카테고리의 다른 글
C : 간단하고 사용하기 쉬운 JSON Parser (0) | 2023.12.04 |
---|---|
C++ : shared_ptr 와 weak_ptr : 개념, 차이, 활용법, 예제, 구현 (0) | 2020.05.10 |
C++ : shared_ptr : 개념, 예제, 사용법, 구현 (0) | 2020.05.08 |
C++ : 자동 메모리 관리, 가비지 컬렉션, 참조 카운트 : 개념, 관계, 장단점 (0) | 2020.05.07 |
C++ : unique_ptr : 배스트 프렉티스, 기본 예제, 활용 방법, 동작 방식 (0) | 2020.05.06 |