클래스 공유 리소스-올바른 솔루션?
-
29-10-2019 - |
문제
이것은 숙제가 아니라 내 코드에 대한 질문 일뿐입니다 (C ++를 배우고 있습니다).
모두 동일한 리소스, SDL에 의해로드 된 BMP를 사용하는 클래스 Renderer
의 여러 인스턴스가 있습니다.이것이 수업의 공유 리소스를 관리하는 올바른 방법입니까?그렇지 않다면 좋은 것은 무엇입니까?그렇다면 더 나은 것이 있습니까?
renderer.hpp 라코 디스
renderer.cpp 라코 디스
해결책
<인용구>
이것은 수업의 공유 리소스를 관리하는 올바른 방법인가요?
예, 엄밀히 말하면 올바른 방법입니다. 하지만 가능한 한 빨리 멀어져 야합니다. 아니, 걷지 말고 뛰십시오. 그리고 뒤돌아 보지 마십시오. <인용구>
그렇지 않다면 좋은 것은 무엇입니까?
std::shared_ptr<>
또는 boost::shared_ptr<>
와 유사한 것을 선호합니다.
<인용구>
그렇다면 더 좋은 것이 있습니까?
클래스 내부에 정적 표면 포인터와 정적 참조 카운터를 갖는 대신 표면에 대한 유전자 태그 코드를 하나 유지하고 클래스 외부에서 한 번 만든 다음 렌더러 생성자에 전달합니다. . 이렇게하면 다음과 같은 이점이 있습니다.
( 굵게 편집 : )
-
shared_ptr
가 자동으로 수행하므로 누가 마지막 소유자이고 따라서 리소스 삭제에 대한 책임이 있는지 생각할 필요가 없습니다. - 스레드 안전성
- 코드가 적다는 것은 종종 버그가 적다는 것을 의미합니다.
제휴하지 않습니다 StackOverflow