Derelict 및 D를 사용하여 SDL 자습서 시리즈 (C++로 작성)를 수행하고 있습니다. 지금까지 변환은 간단했지만 튜토리얼 작가 스타일은 나를 귀찮게하고 나는 그 주위의 최선의 방법을 찾아 내려고 노력해 왔습니다. 하지만 D에 대한 지식이 최고가 아니기 때문에이 문제를 해결할 수 있을지 잘 모르겠습니다.Derelict 및 SDL을 사용하여 D에서 외부 리소스를 적절하고 명확하게 관리하는 방법
기본적으로 SDL을 사용하려면 이미지 파일을 SDL_Surfaces로 메모리에로드해야합니다. 프로그램을 종료하기 전에 SDL_FreeSurface()를 사용하여이 표면을 수동으로 해제해야합니다. 이것은 scope(exit)
에 대한 이상적인 케이스처럼 보입니다. 실제로는 단일 기능의 범위에서 리소스를로드 및 언로드하는 데 매우 효과적입니다. 그러나 이상적으로는 하나의 함수가 로딩을 처리하고 다른 어딘가에 다른 함수가 그 함수를 해제하도록 모든 것을 나눠서 처리하는 것이 이상적입니다. 그리고 그 이상으로, 아마 각 자원은 스스로를 처리 할 것입니다. 그게 RAII 같아요. 그러나 D에서 그것을 사용하는 방법을 정말로 모르겠어요. 에로드하고 ~this()
에서 무료로 리소스를 가지고 새로운 클래스를 설정하는 줄 알았지 만 그것은 내가 읽은 것 같다. 클래스를 scope
으로 인스턴스화하지 않으면 소멸자가 호출되지 않을 수 있습니다. 내가 추측 한 구조체를 사용할 수는 있지만 클래스의 유용한 장점을 놓치고있는 것처럼 보입니다.
내가 원한 것은 리소스를로드하고 해제되는 것에 대한 보장을 얻는 것이지만 모든로드 및 언로드를 하나의 거대한 방법으로 처리 할 필요가없는 정상적인 방법으로 수행하는 것입니다. 어떻게 접근해야합니까?
일부 리소스를 프로세스 외부에서 유지 관리 할 수 있습니다. 비디오 카드, 파일 또는 네트워크를 통해. OTOH 저는 자원에 대한 나쁜 설계라고 생각합니다. 즉, 글로벌 세트는 좋은 생각처럼 들립니다. – BCS
+1에 CyberShadow가 말합니다. @BCS - 나쁜 디자인이 아니므로 시스템은 응용 프로그램이 종료 된 후 엉망을 정리할 것을 보장합니다. 그것은 매우 강력한 보증이며, 수백만의 개발자가이 프로그램에 의존합니다. – DejanLekic
필자는 스코어 (exit)가 함수 내에서 (분명히) 위로 이동하는 것으로 제한되는 내 딜레마를 발견했다고 생각합니다. 이제 main "run"함수는'scope (exit) {clean_up();}을 호출합니다. 아마도 매우 우아하지는 않지만 깨끗한 것을 보증하는 제 경우는 모든 것을 다 해줍니다. – CodexArcanum