💡 퀵 접속: cpp.kr/unique_ptr
C++ 표준 라이브러리의 스마트 포인터로, 동적으로 할당된 객체의 소유권을 관리합니다. 한 번에 하나의 unique_ptr만 객체를 소유할 수 있습니다.
#include <iostream>
#include <memory>
int main() {
// 동적 할당
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// 값 접근
std::cout << "값: " << *ptr << std::endl;
// 소유권 확인
if (ptr) {
std::cout << "포인터가 유효합니다." << std::endl;
}
// 자동으로 메모리 해제
return 0;
}
실행 결과:
값: 42 포인터가 유효합니다.
#include <iostream>
#include <memory>
int main() {
// 첫 번째 unique_ptr 생성
std::unique_ptr<int> ptr1 = std::make_unique<int>(100);
// 소유권 이전
std::unique_ptr<int> ptr2 = std::move(ptr1);
// ptr1은 이제 nullptr
if (!ptr1) {
std::cout << "ptr1은 더 이상 소유권이 없습니다." << std::endl;
}
// ptr2가 값을 소유
std::cout << "ptr2의 값: " << *ptr2 << std::endl;
return 0;
}
실행 결과:
ptr1은 더 이상 소유권이 없습니다. ptr2의 값: 100
#include <iostream>
#include <memory>
int main() {
// 정수 배열 생성
std::unique_ptr<int[]> arr = std::make_unique<int[]>(5);
// 배열 초기화
for (int i = 0; i < 5; ++i) {
arr[i] = i * 10;
}
// 배열 출력
std::cout << "배열 요소들: ";
for (int i = 0; i < 5; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
실행 결과:
배열 요소들: 0 10 20 30 40
| 메서드 | 설명 |
|---|---|
| get() | 원시 포인터 반환 |
| reset() | 포인터 초기화 |
| release() | 소유권 포기 |
| swap() | 다른 unique_ptr과 교환 |
| operator* | 역참조 |
| operator-> | 멤버 접근 |