![]() |
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:
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.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; Vielen Dank an Euch schon mal im Vorraus :-D |
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.
|
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. |
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.
|
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; |
Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
Zitat:
@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. |
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.
|
Re: Wie krieg ich eine Referenz auf Array als Rückgabewert
Ein Array ist doch schon ein Zeiger.
|
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.
|
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 17:05 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