문제

세계에서 수동으로 메모리 할당과 포인터전 규칙(Borland 델파이)나는 필요한 일반적인 솔루션을 위해 내가 무엇을 생각하는 일반적인 문제는:

주어진 순간에 객체 참조할 수 있습에서 여러 장소(목록,다른 물체,...).이 있을 유지하는 좋은 방법이 이러한 모든 추적 참조를 할 수 있도록 업데이트들 개체가 파손되었나요?

도움이 되었습니까?

해결책

통지하려는 경우 다른 사람의 변화를 구현해야 합니다 "관찰자의 패턴은".델파이 이미 수행을 위해 당신에 대한 TComponent 후손.를 호출할 수 있습니다 TComponent.FreeNotification 방법 및 귀하의 개체될 때 통지 다른 구성 요소가 파괴됩니다.그것은 그를 호출하여 통지 방법입니다.당신이 자신을 제거할 수 있습니 알림 목록에서 호출하여 TComponent.RemoveFreeNotification.도 이 페이지.

가장 쓰레기 수집가지 않도록 당신의 목록을 참조,그래서 그들에 도움이되지 않습니다.델파이 할 수 있는 참고 믿는 경우 인터페이스를 사용하지만,다시 당신을 추적 할 필요한 참조 자신입니다.

다른 팁

나는 매우 알 수없는 이유를 원하십니다.확실히 당신은 단지 확인하는 참조되지 않 Nil 사용하기 전에 그것은?

Anwyays,두 가지 솔루션을 고려할 것이다:

  1. 는 객체 관리자들은 자신의 참조 계산합니다.
  2. 참조를 만들 계산 관리 클래스입니다.

내가 아마 추가 AddRef()및 ReleaseRef()함수를 하나의 관리자 또는 참조-인식 클래스입니다.할 수 있는 그런 다음 이들을 사용하는 방법을 확인하는 많은 참조를 존재하는 모든 지점에서.COM 그것은이 방법입니다.

참고-인식 클래스를 관리하는 것만 그것은 자신의 참조 계산합니다.관리자 사용할 수 있습지도 연결하는 포인터를 위해 정수 계산합니다.

당신은 노력하는 사람들을 추적을 참조하는 경우 객체를 할 수 있도록 명확한 그 참을 때 물체가 파괴되는,또는 당신를 추적하려고 할 때 그것은 안전을 파괴하는 것은 어떨까요?

후자의 경우에는 그 소리처럼 당신이 찾고있는 쓰레기 수집기.나는 처리하지 마십시오 델파이 그래서 내가 알지 못하는 경우가 있 GCs 그것을 위해 사용할 수 있습니다,하지만 내가 놀라는 경우가 있지 않았다.

이전 다음 GC 아마 없을 돕습니다.는 경우 델피 지원 OOP/inheritence(난 솔직히 알지 못하는 경우에는 않습니다)당신이 뭔가를 할 수 있습니다(사):

// Anything that will use one of your tracked objects implements this interface
interface ITrackedObjectUser {
  public void objectDestroyed(TrackedObject o);
}

// All objects you want to track extends this class
class TrackedObject {
  private List<ITrackedObjectUser> users;

  public void registerRef(ITrackedObjectUser u) {
    users.add(u);
  }

  public void destroy() {
    foreach(ITrackedObjectUser u in users) {
      u.objectDestroyed(this);
    }
  }
}

기본적으로 때마다,당신 추가 중 하나 추적하는 개체를 수집하는 컬렉션은 등록과 자신이 해당 개체.을 때 물체가 파괴되는 것(나는 그리고 파괴()개체의 소멸)다음의 개체 신호를 수집하는 그것의 파괴되도록 컬렉션 무엇이든 할 수 있습니다.

불행하게도,이것은 정말 좋은 솔루션을 사용하려면 빌드-컬렉션이 있습니다.당신이 당신의 컬렉션을 개체(그들은 단지 포장을 구축에 사람도).고 그것을 요구하고 있는지 확인을 등록하기를 원하는 어디든을 추적 객체입니다.그것은 무엇이라고 생각한"행복"솔루션이지만,작은 프로젝트에 대해 그것은 아마 없을 수도 있습니다.나는 주로 기대 이 아이디어 도움이 될 것입 산란 다른 아이디어.:)

있는 특별한 이유가 당신이 원하는가?당신은 문제로 실행하는 불량 점슛,또는 당신의 생각은 그것이 문제가 될 수 있는 어느 날?

이럴 것이 문제가 되지 않으면 응용 프로그램을 설계할 권고를 사용하여 적절한 패턴이 정말 당신을 도와줍니다.

몇 가지 정보에 대한 패턴:

http://delphi.about.com/od/oopindelphi/a/aa010201a.htm

http://www.obsof.com/delphi_tips/pattern.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top