C++ Konstruktor problem



  • Shade Of Mine schrieb:

    this->A()
    legt ein temporaeres objekt an

    echt?



  • Es gibt keinen Standardkontruktor, also wird this->A() hächstens nen Fehler liefern, aber allgemein hätte ich jetzt auch darauf getippt, das es ein temporäres Objekt erzeugt. Was macht es denn sonst, Volkrad (, vorausgesetzt es gäbe einen entsprechenden Standardkonstruktor.)



  • Shade Of Mine schrieb:

    this->A()
    legt ein temporaeres objekt an

    nicht gerade das, was du willst, oder?

    Ne. Das ist ein Syntaxfehler. In C++ kann man weder Konstruktoren explizit aufrufen, noch ihre Adresse ermitteln.

    Nimm das this weg und du hast recht.

    Also das:

    this->A::A(n*m);
    

    ist kein C++.
    Und das:

    A(n*m);
    

    würde ein temporäres Objekt anlegen.



  • HumeSikkins schrieb:

    Also das:

    this->A::A(n*m);
    

    ist kein C++.

    nein? Hat mir da jetzt mein Compiler (VC6) einen Steich gespielt? Oder regt sich wieder jemand über dieses komische this-> auf?



  • tag schrieb:

    nein? Hat mir da jetzt mein Compiler (VC6) einen Steich gespielt? Oder regt sich wieder jemand über dieses komische this-> auf?

    wenn Hume sagt "das ist kein C++", dann kannst du davon ausgehen, dass es kein C++ ist.



  • Hat mir da jetzt mein Compiler (VC6) einen Steich gespielt?

    Sicher nicht mit Absicht. Das er es übersetzt ist aber in der Tat ein Fehlverhalten. Das Ergebnis ist übrigens das, was Shade geschrieben hat. Es wird ein temporäres Objekt erzeugt.



  • Hmm, na gut, hab eben nochmal ein paar Dokus durchwühlt, scheint wohl echt verboten zu sein 💡

    HumeSikkins schrieb:

    Das Ergebnis ist übrigens das, was Shade geschrieben hat. Es wird ein temporäres Objekt erzeugt.

    Da sagt mein call-stack aber was anderes 😉 Aber da es sowieso kein "richtiges" c++ ist, spielt das ja eigentlich auch keine Rolle 😉



  • Du kannst ja ein

    m_a = A(m*n).m_a;
    

    verwenden. 😉



  • Da sagt mein call-stack aber was anderes

    Oh. In der Tat. Der VC ruft hier wirklich einen weiteren Ctor für das Objekt auf. Das macht dann zwei Konstruktor bei nur einem Destruktor-Aufruf und damit auch noch eine klare Verletzung des Objekt-Lebenszyklus-Modells von C++.
    Damit lassen sich ja mal lustige Resourcen-Löcher basteln.

    Das ist ja mal ein Bug der richtigen bösen Sorte.



  • HumeSikkins schrieb:

    Das macht dann zwei Konstruktor bei nur einem Destruktor-Aufruf

    Och, das macht doch nichts. Den fehlenden Destruktoraufruf kannst Du mit

    struct X { virtual ~X(){} };
    delete[] new X[0];
    

    wieder "ausgleichen" 😉 🤡


Anmelden zum Antworten