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.


Anmelden zum Antworten