Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 싱글톤 패턴
- 함수형 팩터리
- 그루비 스타일 빌더
- 동적 데커레이터
- 싱글턴
- 팩터리
- 디자인 패턴
- 데커레이터
- 싱글톤
- 모던C++디자인패턴
- 싱글턴 패턴
- 추상 팩터리
- 컴포지트
- 프로토타입 패턴
- 프로토타입 중복처리
- 동적 데코레이터
- 빌더 패턴
- 데커레이터 패턴
- 흐름식 빌더
- 팩터리 패턴
- 단순한 빌더
- 프로토타입
- 빌더
- 디자인패턴
- 컴포지트 빌더
- 팩터리 메서드
- 브릿지 패턴
- 내부 팩터리
- 컴포지트 패턴
- 브릿지
Archives
- Today
- Total
GGym's Practice Notes
ComPtr 클래스 (COM Smart Pointer) 본문
기존 C++11서부터 표준이 되었던 Smart Pointer, 그중 shared_ptr은 DirectX에서 함수 파라미터로 요구했던 Pointer to Pointer (Double Pointer)를 매개변수로 전달하기에는 어려움이 있어 ComPtr을 사용해야 한다.
ComPtr은 기존 스마트포인터와 같이 참조횟수가 0이 되면 메모리에서 해제된다.
요구사항
Header :
#include <wrl.h>
or
#include <wrl/client.h>
Namespace :
using namespace Microsoft::WRL;
자주 사용하는 메서드
- Get() : 바탕 COM 인터페이스를 가리키는 포인터를 리턴 = shared_ptr의 get()
classname* ptr;
std::shared_ptr<classname> sptr;
Microsoft::WRL::ComPtr<classname> cptr;
// 포인터를 인자로 받는 예제 함수 function(void* p)
function(ptr); // 기존 포인터
function(sptr.get()); // 스마트 포인터
function(cptr.Get()); // COM 포인터
- GetAddressOf() : 바탕 COM 인터페이스를 가리키는 포인터의 주소를 리턴. 함수 매개변수를 통해 COM 인터페이스를 리턴 받을때 쓰인다. Pointer to Pointer를 인자로 하는 매개변수로 줄 때 사용
classname* ptr;
std::shared_ptr<classname> sptr;
Microsoft::WRL::ComPtr<classname> cptr;
// 더블 포인터를 인자로 받는 예제 함수 function(void** p)
function(&ptr); // 기존 포인터
//function(&sptr); 동작X, 해당 함수 없음
function(cptr.GetAddressOf()); // COM 포인터
- Reset() : ComPtr 인스턴스를 nullptr로 설정하고 바탕 COM 인터페이스의 참조 횟수를 1 감소. 직접 nullptr 배정을 해도 되며 이때에도 참조 횟수 1 감소
참조 :
https://learn.microsoft.com/ko-kr/cpp/cppcx/wrl/comptr-class?view=msvc-170 (Microsoft Learn)
DirectX 12를 이용한 3D 게임 프로그래밍 입문 (프랭크 D. 루나 / 한빛미디어)