<list> in Verbindung mit Zeiger?!



  • fdfdg schrieb:

    fdfdg schrieb:

    HighLigerBiMBam schrieb:

    Das kaufe ich dir nicht ab. Die zwei Klammern sind bei default konstruktor zuviel, aber "A inst(...);" ist definitiv besser.

    T foo(); ist aber leider eine Funktionsdeklaration.

    Sorry, Unsinn, hab falsch gelesen..

    Wieso Unsinn - natürlich ist das eine Funktionsdeklaration und erstellt mit Sicherheit kein Objekt.



  • is doch korrekt schrieb:

    fdfdg schrieb:

    fdfdg schrieb:

    HighLigerBiMBam schrieb:

    Das kaufe ich dir nicht ab. Die zwei Klammern sind bei default konstruktor zuviel, aber "A inst(...);" ist definitiv besser.

    T foo(); ist aber leider eine Funktionsdeklaration.

    Sorry, Unsinn, hab falsch gelesen..

    Wieso Unsinn - natürlich ist das eine Funktionsdeklaration und erstellt mit Sicherheit kein Objekt.

    Ja, aber ich hab HighLigerBiMBams "Die zwei Klammern sind bei default konstruktor zuviel" überlesen, wollte ihm halt widersprechen.



  • Da ich für die Verwirrung schuld bin:

    A mystackobject = A(); //Stack
    A mystackobject; //Stack
    A *mypointer = new A; //Heap
    

    Mit new wird auf dem Heap erzeugt, sonst auf dem Stack. Das heißt aber nicht, dass wenn du ein Objekt auf dem Stack erzeugt, dies keine Member auf dem Heap anlegen kann. In jedem Fall sollten aber Objekte sich selbst aufräumen.

    T foo(); //ist eine Funktionsdeklaration.
    


  • Absolute_nooby schrieb:

    class A
    ...
    
    int main
    {
        A* inst = &A();
        inst->f(); //hier krach es beim debuggen
    

    C++ erlaubt dir nicht, die Adresse eines temporären Objekts zu holen. Das ist auch gut so, denn das temporäre Objekt "stirbt" quasi "mit dem Semikolon" (nachdem der vollständige Ausdruck ausgewertet worden ist). Ich würde die nicht-Standard-Erweiterungen Deines Compilers ausschalten und die Warn-Stufe erhöhen.


Anmelden zum Antworten