AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Spring4D TSingleton<> Memory Leak bei Klasse mit class constructor
Thema durchsuchen
Ansicht
Themen-Optionen

Spring4D TSingleton<> Memory Leak bei Klasse mit class constructor

Ein Thema von Chris55 · begonnen am 5. Okt 2020 · letzter Beitrag vom 22. Nov 2020
 
Chris55

Registriert seit: 5. Okt 2020
6 Beiträge
 
#1

Spring4D TSingleton<> Memory Leak bei Klasse mit class constructor

  Alt 5. Okt 2020, 07:27
Hallo zusammen,

Im Rahmen eines Beispielprojekts habe ich das in Spring4D implementierte TSingleton demonstriert.

Ich hatte hierzu auch eine Klasse, wo ich testweise einen "class constructor" (also nicht den normalen Instanz-constructor) implementiert hatte,
da ich hier der Form wegen einen eigenen Demo-Referenzcounter initialisieren wollte.

Im Projekt habe ich FastMM4 aktiviert.

Aufgefallen ist mir, daß Klassen, welche einen (zusätzlichen) "class constructor" haben, einen Memory Leak verursachen.

Die Frage für mich ist momentan, ob das nun in irgendeiner Weise ein Bug ist oder ich hier evtl. das Offensichtliche einfach nur übersehe und ich in einer Klasse, von welcher ich normale Instanzen erzeugen möchte, evtl. gar keinen "class constructor" machen darf, weil ich hierdurch den Typ oder das Verhalten der Klasse ändere. Oder übersehe ich ganz was anderes?

Der reduzierte Beispielcode (Den Teil mit dem FInstanceCount kann man auch komplett rausnehmen, es reicht, daß der "class constructor" vorhanden ist):

Code:
unit Tests;

interface

type
  TMyClass1 = class(TObject);

  TMyClass2 = class(TObject)
  strict private class var
    FInstanceCount: Integer;
  public
    class constructor Create();
  end;

  TTest = record
  public
    class procedure Test(); static;
  end;


implementation

uses
  Spring.DesignPatterns;

{ TTest }

class procedure TTest.Test();
begin
  // Passt:
  Spring.DesignPatterns.TSingleton.GetInstance<TMyClass1>;
  // Memory-Leak:
  Spring.DesignPatterns.TSingleton.GetInstance<TMyClass2>;
end;

{ TMyClass2 }

class constructor TMyClass2.Create();
begin
  inherited;
  FInstanceCount := 0;
end;

end.
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz