내가 볼 수 있듯이, 결정 론적 파괴와 명백한 두 가지 형태의 자원 관리가 있습니다. 전자의 예는 C ++ 소멸자 및 스마트 포인터 또는 Perl의 DESTROY 하위이고 후자의 예는 Ruby의 관리 대상 자원 패러다임 또는 .NET의 IDispose 인터페이스입니다.
최신 언어는 후자를 선택하는 것으로 보이며, 비 참조 계수 품종의 가비지 수집 시스템을 사용하는 부작용 일 수 있습니다.
내 질문은 이것입니다 : 스마트 포인터 또는 참조 계산 가비지 수집 시스템의 소멸자 (거의 동일한 것)는 암시적이고 투명한 리소스 파괴를 허용한다는 점에서 명시 적에 의존하는 비 결정적 유형보다 덜 누출 적입니다. 표기법?
구체적인 예를 들어 보겠습니다. 단일 수퍼 클래스에 세 개의 C ++ 서브 클래스가있는 경우 특정 소멸이 필요하지 않은 구현이있을 수 있습니다. 아마도 그것은 다른 방식으로 마술을 수행합니다. 특별한 파괴가 필요하지 않다는 사실은 관련이 없습니다. 모든 서브 클래스는 여전히 똑같은 방식으로 사용됩니다.
또 다른 예는 Ruby 블록을 사용합니다. 두 개의 서브 클래스가 자원을 해제해야하므로 수퍼 클래스는 생성자를 사용하는 인터페이스를 선택합니다. 다른 특정 서브 클래스는 특별한 소멸이 필요하지 않으므로 필요하지 않을 수도 있습니다.
후자는 자원 파괴에 대한 구현 세부 사항을 유출하지만 전자는 그렇지 않습니까?
편집 : 비교하자면, 루비 투 펄 (Ruby to Perl)은 결정 론적 파괴가 있고 다른 하나는 결정적이지 않기 때문에 더 공정 할 수 있지만 둘 다 가비지 수집됩니다.
(*ptr).Message()
거나 이에 상응 하는 포인터를 역 참조해야합니다 ptr->Message()
. 마찬가지로 허용되는 표현식의 무한 세트 ((*ptr))->Message
가 있습니다. 그러나 그들은 모두 expressionIdentifyingAnObject.Message()