728x90
반응형
소유 타입
은 해당 객체가 자원의 소유권 을 가지고 있어, 수명 관리(생성/소멸) 를 책임집니다.- 이 타입은 객체가 소멸될 때 자동으로 해당 자원을 해제합니다.
std::vector<T>
std::string
std::unique_ptr<T>
std::shared_ptr<T>
std::list<T>
등 STL 컨테이너 대부분
-
cpp
std::vector<int> data = {1, 2, 3}; // data가 메모리의 소유권을 가짐
- 뷰 타입은 자원을 소유하지 않고 참조만 하는 타입입니다.
- 즉, 자원의 소유권은 다른 객체가 가지고 있으며, 해당 데이터가 존재하는 동안만 유효합니다.
T*
,const T*
→ 일반 포인터std::string_view
(C++17
) → 문자열 뷰std::span<T>
(C++20
) → 범위 참조std::ranges::subrange
(C++20
)std::array_view
(C++
비표준)
-
cpp
#include <string_view> #include <iostream> void print(std::string_view sv) { // std::string_view는 std::string이나 char*로부터 // 문자열을 얕게 참조하고, 소유하지 않습니다. std::cout << sv << '\n'; } int main() { std::string str = "Hello, World!"; print(str); // std::string print("Temporary literal"); // const char* }
-
구분 소유 타입 ( vector
,unique_ptr
)뷰 타입 ( span
,string_view
)소유권 O X 생명주기 관리 직접 관리 외부 자원에 의존 복사 비용 깊은 복사 ( deep copy
)얕은 복사 ( shallow copy
)사용 용도 자원 생성 및 유지 읽기 전용, 임시 접근
- 함수 파라미터 전달 시, 복사가 불필요하면
std::span
또는std::string_view
와 같은 뷰 타입을 사용하는 것이 성능상 유리 합니다. - 하지만 뷰 타입은 수명 관리에 주의 해야 합니다.
- 참조 대상 객체가 먼저 소멸되면 댕글링 포인터(유효하지 않은 참조) 문제가 발생할 수 있습니다.
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
728x90
반응형
'C C++' 카테고리의 다른 글
C++20 컴파일 타임 함수 : consteval과 constinit (0) | 2025.03.30 |
---|---|
C++ SFINAE(Substitution Failure Is Not An Error) : 템플릿 조건부 제어를 위한 핵심 기법 (0) | 2025.03.29 |
C++20 분기 예측 : [[likely]], [[unlikely]] (0) | 2025.03.29 |
C++ 테스트 프레임워크에서의 부동소수점(float, double) 근사 비교(Approximate Comparison) (0) | 2025.03.28 |
C++11 =default 와 =delete (0) | 2025.03.28 |