[c++] Smart pointers의 종류와 사용법
1. Smart 포인터란 무엇인가
스마트 포인터(Smart Pointer)는 메모리 누수를 방지하고 프로그램 안정성을 높이기 위해 사용되는 C++의 포인터 형식 중 하나입니다. 스마트 포인터는 자동으로 메모리를 할당하고 해제하여, 개발자가 명시적으로 메모리 관리를 하지 않아도 되도록 도와줍니다.
2. Unique 포인터
유니크 포인터(Unique Pointer)는 특정 객체에 대해 단일 소유권을 가지며, 객체가 더 이상 필요 없을 경우 자동으로 메모리를 해제하는 스마트 포인터입니다. 다른 스마트 포인터나 원시 포인터와 공유할 수 없으며, 특정 객체에 대한 단일 소유권을 강제합니다.
예시 코드:
#include <memory>
int main() {
std::unique_ptr<int> ptr(new int(5));
// ptr이 스코프를 벗어나면 자동으로 메모리 해제
}
3. Shared 포인터
쉐어드 포인터(Shared Pointer)는 여러 스마트 포인터가 공유 소유권을 가질 수 있는 스마트 포인터입니다. 객체에 대한 참조 횟수를 추적하여, 참조 횟수가 0이 되면 자동으로 메모리를 해제합니다.
예시 코드:
#include <memory>
int main() {
std::shared_ptr<int> ptr1(new int(5));
{
std::shared_ptr<int> ptr2 = ptr1; // ptr1과 ptr2가 같은 리소스를 공유
} // ptr2가 스코프를 벗어나도 ptr1으로 인해 메모리 유지
}
4. Weak 포인터
위크 포인터(Weak Pointer)는 순환 참조 문제를 해결하기 위해 사용되는 스마트 포인터입니다. Shared 포인터를 참조하되, 객체의 수명 주기에 영향을 미치지 않으면서 객체를 관찰할 수 있습니다.
5. 사용 예시
스마트 포인터는 메모리 누수와 댓글러포인터 등으로부터 프로그램을 보호하는데 유용합니다. 앞서 소개한 스마트 포인터들을 적절히 활용하여 메모리 관리를 효과적으로 수행할 수 있습니다.
이 글은 cplusplus.com, cppreference.com 등에서 참고 자료를 활용하여 작성되었습니다.