Was kann ich tun damit der Destruktor nicht aufgerufen wird.
-
Nun meine funktion
const CLIENT EFS::FindMinimum(long int StartFile, long int MaxFiles) { //Variablen register long int fCounter; register long int MaxCounter; CLIENT OldClient; CLIENT NewClient; CLIENT ReturnClient; long int MinimumClient; ifstream TempInput; // fCounter = 0; StartFile + this->GetFussionSize() > MaxFiles ? MaxCounter = MaxFiles : MaxCounter = StartFile + this->GetFussionSize(); MinimumClient = -1; //Hauptprogramma for(fCounter = StartFile; fCounter < MaxCounter; fCounter++) { TempInput = this->GetOneFileIFStream(fCounter); MyAssert(!TempInput, __FILE__, "000 000", "Fatal Error.\n"); if(!TempInput.eof()) { streampos Mark = TempInput.tellg(); TempInput >> NewClient; if(NewClient > OldClient && NewClient.TestEmpty()) { MinimumClient = fCounter; } OldClient = NewClient; NewClient.ClientCleanUp(); TempInput.seekg(Mark); } } if(MinimumClient >= 0) { TempInput = this->GetOneFileIFStream(MinimumClient); TempInput >> ReturnClient; } else { //Muss ich noch machen } return ReturnClient; //Hier wird der destruktor aufgerufen und ich bekomme nichts zuruck }
Solte ich das machen
const CLIENT EFS::FindMinimum(long int StartFile, long int MaxFiles) const??
meine lössung meines problems were
const CLIENT &EFS::FindMinimum(long int StartFile, long int MaxFiles)
aber ich bekome dann error von kompiler das ReturnClinet temporer ist.Danke im voraus.
-
hat CLIENT einen kopierkostruktor? nee, den haste vergessen, oder?
-
Master User schrieb:
meine lössung meines problems were
const CLIENT &EFS::FindMinimum(long int StartFile, long int MaxFiles)
aber ich bekome dann error von kompiler das ReturnClinet temporer ist.volkard schrieb:
hat CLIENT einen kopierkostruktor? nee, den haste vergessen, oder?
Wenn eine Referenz zurückgegeben werden soll, wird das referenzierte Objekt nicht kopiert, aber man darf keine Referenz auf ein temporäres (lokales) Objekt zurückgeben, weil es nach Funktionsende (der Rückgabe) kaputt ist. Außerdem solltest Du Die Funktion als const definieren, wenn sie keine Member verändert.
-
Kannst ja mal probieren, den ReturnClient als static zu definieren.
-
Na turlich hat client ein copycomstruktor. Und static nein so wiil ich nicht. Ich versuchs mal mit const.
-
Master User schrieb:
Na turlich hat client ein copycomstruktor. Und static nein so wiil ich nicht. Ich versuchs mal mit const.
Mit const hat das Problem aber gar nichts zu tun. Wenn du const hinter die Parameterliste einer Methode schreibst, dann heißt das einfach, dass die Methode keine Member verändern darf. Der Knackpunkt ist, dass bei
const CLIENT EFS::FindMinimum(long int StartFile, long int MaxFiles) const
keine Referenz zurückgegeben wird, sondern eine Kopie. Also tritt dabei das Problem der Rückgabe einer Referenz auf ein temporäres Objekt nicht auf.