c++ Casten



  • Hallo zusammen,

    ich habe folgende syntax:

    classB* b_class;
    
    .....
    b_class = (classB*) new classB(false);
    

    Bei dieses casten ist eine mischmasch zwischen C und C++.
    Meine Vorschlag wäre:

    b_class = static_cast<classB*>(new classB(false));
    

    aber so 100% bin ich nit
    Was sagt ihr dazu?

    Danke


  • Mod

    Mist. Aus vielerlei Gründen:

    • Der Cast ist vollkommen unnötig, new ist nicht malloc. new gibt einen passenden Zeigertypen zurück.
    • new/delete ist in Anwendungscode praktisch immer falsch. Auch hier ist nicht erkennbar, wieso man nicht wenigstens einen Smartpointer und make_unique oder ähnliches nutzen sollte. Wahrscheinlich ist irgendeine Art von Container noch besser geeignet.
    • Aufgrund des vorherigen Punktes stelle ich mal infrage, ob hier überhaupt dynamische Speicherverwaltung benutzt werden sollte. Wird von vielen Leuten viel zu häufig benutzt, oft weil sie gar nicht wissen, dass man es nicht braucht.


  • Welchen Cast meinst du ist einen "Mist"?

    1. Der C cast
      oder
    2. der C++ Cast

    Der erste C cast ist schon klar, dass unsauber ist aber der Zweite?

    Danke



  • Was willst Du denn da casten?
    new classB(... gibt einen Zeiger vom Typ classB zurück, und b_class ist vom Typ Zeiger auf classB ... ?!



  • ManuelGast schrieb:

    Welchen Cast meinst du ist einen "Mist"?

    In dem Fall Beide. Warum willst du einen "Zeiger auf classB" auf einen "Zeiger auf classB" casten? Merkst du selbst den logischen Fehler? Irgendwie doppelt-gemoppelt...

    classB * b_class = new classB(false);
    

    Ohne jedweden Cast.

    Aber auch die anderen Anmerkungen sind zu beachten: Ein roher besitzender Zeiger ist selten eine gute Wahl.



  • ach danke
    😕



  • ManuelGast schrieb:

    ach danke
    😕

    Mit "roher besitzender Zeiger" meint man, dass du dich selbst um die Destruktion des Objekts hinter dem Zeiger kümmern musst. Dabei gibt es doch intelligente Zeiger, die einem das abnehmen und du nicht mehr daran zu denken brauchst.


Anmelden zum Antworten