Kopierkonstruktor und Operator= sollen nur Link erzeugen



  • Hi, ist es möglich Kopierkonstruktor und den Operator= einer Klasse so zu überladen, dass wenn diese aufgerufen werden, nicht eine neue Instanz der Klasse erstellt wird, sondern lediglich die neu erstellte Klasse einen anderen Namen für die erste darstellt? Vll. wirds im Beispiel verständlicher:

    MyClass A;
    A.SomeValue = 3;
    MyClass B = A; // oder MyClass B(A);
    B.SomeValue = 5;
    std::cout << A.SomeValue; // soll jetzt auch 5 sein und nicht 3
    

    Wie kann man soetwas realisieren? Am liebsten ohne das ich dann nur noch mit Zeigen auf meine Klassen arbeiten kann. Idealerweise würde der Destruktor dann auch nur einmal aufgerufen werden.

    Vielen Dank für Hilfe!



  • Nein. Warum sollte das auf Objektebene geschehen? Für sowas gibt es Referenzen.

    MyClass& B = A;
    


  • Aber was Du dann baust, SIND Zeiger. Warum sie nicht Zeiger nennen? Auto-Aufräum-Zeiger wurst Du unter dem Suchbegriff "smart pointer" finden.
    Wenn Dir Smart Pointers absolut nicht gefallen, nimm vielleicht Java. C# oder VB, dort sind alle Klassenobjekte automagisch so wie Du magst. Ansonsten kannst Du Kopierkonstruktor und Zuweisungsoperator prima mit Pimpl und Cow vergewaltigen, wobei Du Cow einfach wegläßt.



  • Nunja, das ganze hat den Hintergrund das ich vesuche zu einer Singleton-Klasse lokale verfügbar zu machen.

    MyClass::Instance().A();
    MyClass::Instance().B();
    MyClass::Instance().C();
    

    ist mir da zu umständlich, vorallem da durch die viele ::Instance() aufrufe doch garantiert ordentlich overhead erzeugt wird. Soetwas ist mein Ziel:

    MyClass A = MyClass::Instance();
    A.A();
    A.B();
    A.C();
    

    Gibt es dafür elegante Lösungen?



  • x4rd3n schrieb:

    Gibt es dafür elegante Lösungen?

    Würdest du vielleicht nochmals meinen Post lesen?



  • Die elegantere Lösung wurde bereits genannt: Referenzen.


Anmelden zum Antworten