anchor.diff:  
   { TmStringDictionary }
   
  -constructor TmStringDictionary.Create();
  -begin
  +constructor TmStringDictionary.Create(const aOwnsObjects : boolean = false);
  +begin
  +  Inherited;
     FImpl := CreateTmStringDictionary;
   end;
   
  
positive.code: interface
  
  uses
    mMapsImpl;
  
  type
  
    { TmStringDictionary }
  
    TmStringDictionary = class
      strict private
        FImpl : TmStringDictionaryImpl;
      public
        constructor Create();
        destructor Destroy; override;
  
        procedure Add(const aStringKey: String; aObject: TObject);
  
negative.code: 
  implementation
  
  uses
    sysutils;
  
  { TmBaseDictionary }
  
  procedure TmBaseDictionary.InternalAdd(const aObject: TObject);
  begin
    if FOwnsObjects and Assigned(aObject) then
      FGarbage.Add(aObject);
  end;
  
  procedure TmBaseDictionary.InternalRemove(aObject: TObject);
  begin
    if FOwnsObjects and Assigned(aObject) then
      FGarbage.Remove(aObject);
  end;
  
  procedure TmBaseDictionary.InternalClear;
  begin
    if FOwnsObjects then
      FGarbage.Clear;
  end;
  
  constructor TmBaseDictionary.Create(const aOwnsObjects: boolean);
  begin
    FOwnsObjects:= aOwnsObjects;
    if FOwnsObjects then
      FGarbage := TObjectList.Create(true);
  end;
  
  destructor TmBaseDictionary.Destroy;
  begin
    FreeAndNil(FGarbage);
    inherited Destroy;
  end;
  
  { TmIntegerDictionary }
  
  constructor TmIntegerDictionary.Create(const aOwnsObjects : boolean = false);
  begin
    inherited;
    FImpl := CreateTmIntegerDictionary;
  end;
  
  