AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi [Tutorial] Singletons in Delphi
Tutorial durchsuchen
Ansicht
Themen-Optionen

[Tutorial] Singletons in Delphi

Ein Tutorial von MisterNiceGuy · begonnen am 29. Jan 2010 · letzter Beitrag vom 1. Feb 2010
 
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: [Tutorial] Singletons in Delphi

  Alt 29. Jan 2010, 22:52
Hallo,

folgendes ist mir aufgefallen:

Zitat:
Delphi-Quellcode:
var BK:TBundeskanzer;
begin
  // BK muss natürlich zuvor noch initialisiert werden
  TBundeskanzer.getInstance; // Funktion steht zur Verfügung
  BK.getInstance; // Funktion wird nicht gefunden
end;
Das ist so nicht korrekt, class functions (& procedures) können in Delphi sehr wohl auch auf einer Instanz aufgerufen werden.

Zitat:
Delphi-Quellcode:
Destructor TBundeskanzler.destroy;
begin
  if g_BK = self then
    g_BK := nil;
  inherited destroy;
end;
Die Prüfung auf "g_BK = Self" kannst Du Dir sparen (es ist ja ein Singleton).
Statt dessen finde ich es sinnvoller im Destruktor eine Exception ausgelöst werden, damit niemand (aus Versehen oder absichtlich) die Singleton-Instanz zerstört.

Delphi-Quellcode:
destructor TBundeskanzler.destroy;
begin
  raise Exception.Create('Singleton darf nicht zerstört werden!');
end;
Die Methode getInstance sollte nach Möglichkeit Threadsicher gestaltet werden, damit beim gleichzeitigen Zugriff durch zwei Threads beide die selbe Instanz erhalten:

Delphi-Quellcode:
Function TBundeskanzer.getInstance:TBundeskanzler;
begin
  if (g_BK = nil) // statt TBundeskanzler.create reicht auch nur Create
  then InterlockedCompareExchange(g_BK, Create, nil);
  Result := g_BK;
end;
mr2
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  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 02:38 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