Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie krieg ich eine Referenz auf Array als Rückgabewert (https://www.delphipraxis.net/105294-wie-krieg-ich-eine-referenz-auf-array-als-rueckgabewert.html)

Oracle 19. Dez 2007 10:23


Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Hey Leute, sagt mal wie mache ich folgendes:

Ich habe eine Klasse die ein Array of double enthält.
Nun will ich in der Klasse eine Methode realisieren die mir einen Zeiger auf dieses Array liefert.

Delphi-Quellcode:

type
  TKlasse = class
    DatenArray : array of double;
    procedure GetRefDatenArray;
  end;


procedure TKlasse.GetRefDatenArray
begin
  // Hier möchte ich ein Referenz auf das DatenArray liefern
end;
Der Grund ist folgender. Das Array ist sehr groß, und deshalb will ich nicht dass es kopiert wird, sondern ich will lediglich eine Referenz haben, um mehr Performance und weniger Speicherverbrauch zu haben.

Vielen Dank an Euch schon mal im Vorraus :-D

Muetze1 19. Dez 2007 10:27

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Da es ein dynamisches Array ist, ist es automatisch intern ein Zeiger. Wenn du die Kopie verhindern willst, dann gib es als VAR Parameter weiter.

Bernhard Geyer 19. Dez 2007 10:28

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Stelle DatenArray als Read-Only-Property zur verfügung.

Quatch - wird ja dann kopiert. :-(

Nochmal Edit:

Interne Implementierungsdetails (hier Array of double) sollten nicht nach außen sichtbar sein.
Erstell ein Array-Property und greif dann auf das interne array of double zu.

Oracle 19. Dez 2007 10:36

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
@Mütze: du hast mich missverstanden. Ich will nicht das Array an die Funktion übergeben. Dann ist klar dass ich mit var vor dem Parameter eine Referenz übergebe. Was ich machen will ist die andere Richtung. Ich möchte die Methode aufrufen und von ihr eine Referenz des Arrays zurückgeliefert bekommen.

generic 19. Dez 2007 10:51

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Meinst du das so?
Delphi-Quellcode:
type
  TMyarray = array of double;
  TKlasse = class
  private
    fDatenArray : TMyarray;
    function getDatenArray: TMyarray;
  public
    property DatenArray: TMyarray read getDatenArray;
  end;

{ TKlasse }

function TKlasse.getDatenArray: TMyarray;
begin
  result:=fDatenArray;
end;

Muetze1 19. Dez 2007 10:54

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Zitat:

Zitat von Oracle
@Mütze: du hast mich missverstanden. Ich will nicht das Array an die Funktion übergeben. Dann ist klar dass ich mit var vor dem Parameter eine Referenz übergebe. Was ich machen will ist die andere Richtung. Ich möchte die Methode aufrufen und von ihr eine Referenz des Arrays zurückgeliefert bekommen.

Nein, habe ich nicht. Wenn es eine solche Möglichkeit für ein Result gibt, dann hätte ich dir das geschrieben - gibt es aber nicht.

@generic: Das Result ist bei dir auch eine Kopie und nicht das originale Array. Dein Result landet in einer lokalen Variable (also der Zeiger) und somit wird es eine Kopie, da jedes Resize etc sich nur auf die lokale Variable auswirkt und somit niemals die Adresse in der Instanz aktualisiert wird.

Oracle 19. Dez 2007 11:58

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
hmmmm....es muss doch eine Möglichkeit geben, einfach nur einen Zeiger auf ein Array aus einer Funktion zurückbekommen.

mkinzler 19. Dez 2007 12:00

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Ein Array ist doch schon ein Zeiger.

Oracle 19. Dez 2007 12:34

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Um es genau zu sagen, die Funktion soll mit die Speicheradresse zurückliefern unter der das Array gespeichert ist. Und nicht das Array kopieren, und mir einen Zeiger auf das kopierte Array liefern. Weil ich sonst eine Menge Speicher verschwendet wird.

sirius 19. Dez 2007 12:36

Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
 
Na du kannst einfach einen Pointer zurückgeben. Aber daraus einfach eine zweite Referenz auf das Array hinzubiegen, dass dürfte der Compiler nicht so ohne weiteres mitmachen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz