[DX12] Microsoft::WRL::ComPtr

Fuji ㅣ 2022. 12. 12. 03:33


특징

  • Microsoft::WRL::ComPtr이라는 템플릿 클래스를 제공한다.
  • 프로그래머가 일일이 메모리 해제를 해주지 않아도 된다.
    ( 범위를 벗어난 포인터는 자동으로 메모리 해제가 된다. )
  • COM이 사용된 객체는 접두어 I를 붙이는게 관례이다. ( ex. ID3D12CommandList )

 

 

선언 방법

ComPtr<자료형 타입> 변수명

#include <wrl.h>

// == Microsoft::WRL::ComPtr<ID3D11Device> device 축약형
using Microsoft::WRL::ComPtr; 

// ComPtr 선언
ComPtr<ID3D11Device> device;

// ComPtr 사용
device.Get() // 포인터.
device.GetAddressOf() // 포인터의 주소.

// 참조할 때는 일반 포인터와 마찬가지
*device

 

 

인터페이스

  • Get()
    ComPtr에 지정된 타입의 포인터를 반환한다.
  • GetAddressOf()
    ComPtr 내부의 데이터 멤버 포인터의 주소를 반환한다.
    createCommandAllocator( Comptr(변수).GetAddressOf() );
    위 처럼 어떠한 포인터를 전달 받을때에 유용하게 사용된다.
  • Reset()
    ComPtr의 데이터 멤버를 nullptr로 설정하고 참조 횟수를 1 감소시킨다.
    (= 혹은 ComPtr에 직접 nullptr로 설정해도 참조 횟수가 감소한다. )

 

 

참고 사이트

그외 세부 사항은 아래 링크를 참고하자.

https://learn.microsoft.com/ko-kr/cpp/cppcx/wrl/comptr-class?view=msvc-170 

 

ComPtr 클래스

자세한 정보: ComPtr 클래스

learn.microsoft.com