저는 C++로 게임을 제작 중이며 메모리 누수로부터 자신을 보호하기 위해 처음부터 모든 것을 올바르게하고 싶습니다.DirectX, 참조 카운트 및 스마트 포인터
현재 모든 direct3D 항목을 포함하는 D3D 클래스가 있습니다.
그러나 내 Render() 메소드는 어느 시점에서 DeviceContext에 액세스해야합니다. 그것을 얻으려면, 내 D3D 클래스 자체 내에서 ID3D11DeviceContext 포인터를 반환해야합니다. 이것은 참조 수를 늘리지 않고 그 COM 객체에 대한 다른 참조를 가짐을 의미합니다. 예를 들어
:
Render()
{
m_d3d.GetDevCon()->DoWhatever();
}
내가 의미처럼 사용할 수 나는 포인터의 외부 복사본을 만들 필요가 없습니다? 이게 안전할까요? 나는 그런 잠재적으로이 같은 일이 나쁜 일에서 내 프로그램을 보호하기 위해 할 수있는 일이 있습니까 :
Render()
{
ID3D11DeviceContext* devCon = m_d3d.GetDevCon();
devCon->DoWhatever();
}
나는이 참조 횟수가 참조의 실제 수와 일치하지 않을 의미 볼 수 있었다.
본질적으로 가능한 한 원시 포인터를 사용하지 않으려합니다. 나는 스마트 포인터를 사용하는 것뿐만 아니라 사용할 때도 알기를 원합니다.
렌더링 클래스의 std :: unique_ptr이 필요한 것을 해결하지 못하는 이유는 무엇입니까? – PDizzle745
그것은 할 수도 있지만 스마트 포인터에 대한 나의 지식은 막연하다. 나는 그것을 사용하는 방법에 대한 첫 번째 단서가 없다. – Mark
포인터가 * 자리에 앉지 않도록하려는 것 같습니다. *; 'GetDevCon'가 포인터가 아닌 DeviceContext에 대한 참조를 리턴하도록 고려하십시오. –