Rückgabe per Referenz



  • Hi Leute

    Wieso kriege ich unten 1 mal A und einmal B als Ausgabe. Bei getModel() wird doch eine Referenz auf den Member von FaceRecog zurückgegeben. Dann ändere ich den Namen. Warum kriege ich unterschiedlich Ergebnisse. Bei Rückgabe per Referenz wird doch normalerweise kein Kopierkonstruktor aufgerufen oder?
    Es sollte doch 2 x B rauskommen. Warum kommt A und B raus?

    #include <iostream>
    
    using namespace std;
    
    class MyModel
    {
    public:
    	MyModel() { m_modelName = "A!"; }
    	void setModelName(const string& name)
    	{
    		m_modelName = name;
    	}
    
    	string m_modelName;
    };
    
    class FaceRecog
    {
    public:
    	MyModel& getModel()
    	{
    		return m_model;
    	}
    	MyModel m_model;
    };
    
    int main()
    {
    	FaceRecog faceRecog;
    	MyModel myModel;
     myModel = faceRecog.getModel();
    	myModel.setModelName("B!");
    
    	cout << endl << "MyModel::Name:" << myModel.m_modelName.c_str() << endl;
    	cout << endl << "FaceRecog::MyModel::Name:" << faceRecog.getModel().m_modelName.c_str() << endl;
    	cin.get();
    	return 0;
    }
    


  • Vielleicht solltest du richtig lesen?

    MyModel& model = m_faceRecognizer->getModel();
    


  • Hi

    Danke für die Antwort. Ich programmiere seit Jahren C++ und dachte immer wenn man per Referent was zurückgibt wird immer eine Referenz erstellt auch wenn vornedran keine Referenz steht. Oder vielleicht bin ich nur heute verwirrt, keine Ahnung.
    Jetzt ist einiges klar!



  • Ich mag es gar nicht, wenn jemand nachträglich eine Frage völlig neu schreibt. Wenn du nicht möchtest, dass man dich für blöd hält, solltest du vielleicht von Anfang an nicht so drauflos poltern.



  • Vielleicht hast du gemerkt, dass beide Fragen exakt dieselben sind. Und was meinst du wie egal mir ist was du nicht magst. Kannst ja zum Mami rennen und ihr sagen: " Das Verhalten der anderen im Forum mag ich nicht!".



  • siffkroete schrieb:

    Vielleicht hast du gemerkt, dass beide Fragen exakt dieselben sind. Und was meinst du wie egal mir ist was du nicht magst. Kannst ja zum Mami rennen und ihr sagen: " Das Verhalten der anderen im Forum mag ich nicht!".

    Tja, jetzt kann dich doch jeder richtig einschätzen.



  • Und das magst du hoffentlich!



  • Sonst schreib mal wieder wenn dir was nicht gefällt



  • Fragen nachträglich zu ändern ist blöd und für alle ärgerlich, weil dann alle folgenden Antworten nicht mehr passen. Mach das nicht.

    Zu deinem Problem (stand jetzt): du hast 2 Models. Einmal das myModel, einmal das faceRecog.m_model. Diese können natürlich unterschiedlich sein. Du gibst zwar eine Referenz zurück aus getModel, weist es dann aber einer Nicht-Referenz zu. D.h. dann wird kopiert - denn aus einer "normalen" Variablen kann ja nicht plötzlich eine Referenz (oder ein Pointer) werden.

    Manni66s erste Antwort passt somit immer noch, auch wenn die Namen jetzt anders sind.

    Du musst also das Ergebnis auch einer Referenz-Variable zuweisen, z.B. so: MyModel &myModel = faceRecog.getModel(); oder auto &myModel = ... .


Anmelden zum Antworten