[Effective C++] #15 자원 관리 객체, 자원에 대한 접근

2022. 1. 15. 05:23· 언어/Effective C++
목차
  1. [Effective C++] #15 자원 관리 객체, 자원에 대한 접근

[Effective C++] #15 자원 관리 객체, 자원에 대한 접근

 

Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 15 "자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자"에 해당하는 내용입니다.

 

 


 

자원 관리 객체, 그리고 자원에 대한 접근 

 

자원 관리 객체는 외부(API)에서 해당 자원을 접근할 수 있도록 허용해야 합니다. 물론, 외부의 접근을 허용하는 행동은 캡슐화에 위배되는 행동입니다. 하지만, 자원 관리 객체의 목적은 자원을 외부로부터 숨기기 위함이 아니라, 성공적으로 자원 해제를 수행하기 위 위함입니다. 자원 관리 객체의 자원들에 접근하는 방법은 두 가지가 있습니다. 하나는 "명시적 변환", 그리고 다른 하나는 "암시적 변환"이 있습니다. 하나씩 살펴보겠습니다. 

 

명시적 변환, get() 
std::tr1::shared_ptr <A_클래스> pA;	// shared_ptr 타입의 객체
	
int daysHeld (const A_클래스* pA);	//A_클래스의 포인터를 인자로 받습니다.

int days = daysHeld (pA.get());		// get을 통해 shared_ptr -> A_클래스*

std::tr1::shared_ptr과 std::auto_ptr은 명시적 변환을 수행하는 get 멤버 함수를 제공합니다. 이 함수는 자원 관리 객체의 실제 포인터를 반환합니다. 예를 들면, "std::tr1::shared_ptr <A_클래스> pA (createAClass());"의 경우 "A_클래스*"를 반환하겠죠.

 

암시적 변환
class 자원관리_클래스 {
public:
    explicit 자원관리_클래스 (실제자원 A)
    : a(A)
    {}
    ~자원관리_클래스 () {release(a);}
    
    실제자원 get () const { return a; }		// 직접 정의한 명시적 변환 함수
    or
    opeartor 실제자원() const { return a; }	// 직접 정의한 암시적 변환 함수
    
private:
    실제자원 a;
};

암시적 변환을 사용할 것인지, 명시적 변환을 사용할 것인지, 자원관리 클래스의 용도와 사용 환경에 따라 결정해야 합니다.

'언어 > Effective C++' 카테고리의 다른 글

[Effective C++] #17 자원 관리 객체와 new 사용  (0) 2022.01.17
[Effective C++] #16 new 및 delete 사용  (0) 2022.01.17
[Effective C++] #14 자원 관리 객체 심화, RAII, shared_ptr, 삭제자 지정  (0) 2022.01.14
[Effective C++] #13 자원 관리 객체, std::auto_ptr, std::shared_ptr  (0) 2022.01.14
[Effective C++] #11 중복 참조와 자기 대입 연산자  (0) 2022.01.12
  1. [Effective C++] #15 자원 관리 객체, 자원에 대한 접근
'언어/Effective C++' 카테고리의 다른 글
  • [Effective C++] #17 자원 관리 객체와 new 사용
  • [Effective C++] #16 new 및 delete 사용
  • [Effective C++] #14 자원 관리 객체 심화, RAII, shared_ptr, 삭제자 지정
  • [Effective C++] #13 자원 관리 객체, std::auto_ptr, std::shared_ptr
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 알고리즘
  • BOJ
  • 그래프
  • BFS
  • dfs
  • 기술 질문
  • 개발
  • programmers
  • 우선순위 큐
  • 트리
  • stl
  • C++
  • Effective C++
  • Unreal Blueprint
  • set
  • unreal
  • 최단 경로
  • 디자인 패턴
  • 정렬
  • DP

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Effective C++] #15 자원 관리 객체, 자원에 대한 접근
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.