Kann/Sollte man in C++ malloc/calloc/memset etc. verwenden?



  • Hallo,

    ich habe nur eine kurze Frage:

    Ist es evtl. gegen coding conventions wenn man malloc/calloc/memset in C++ benutzt?
    Oder sind die Methoden langsamer wegen Compiler oder so als z.b C++-Funktionen die dasselbe tun?

    Danke



  • Solange du mit reinen PoD-Typen arbeitest, spricht nichts dagegen, malloc() und Co. darauf loszulassen. Bei ausgewachsenen C++ Klassen bekommst du aber ein Problem, weil du die Konstruktoren umgehst und damit die Klasseninvarianten aushebelst:

    std::string* str = calloc(sizeof(std::string),1);
    str->append("Hallo");//BUUM
    


  • Ich weiß gar nicht, ob es zu memset überhaut eine Alternative gibt, von daher kann man das ruhig verwenden..
    Der einzige Vorteil von malloc ist, dass man mit realloc den Speicherbereich vergrößern/verkleinern kann, anders als bei new/delete.
    Und wichtig ist, wie CStoll schon sagte, dass du malloc/realloc/free nur bei Typen anwendest, die keinen Konstruktor/Destruktor brauchen, also int', double's, char's usw, oder aber Zeiger, wenn du eine Liste von Zeigern auf Objekte brauchst, dann etwa so: Object* list = (Object**)malloc( Anzahl * sizeof(Object*) );. Aber halt nicht (!!) Object list = (Object)malloc( Anzahl * sizeof(Object) );* ⚠



  • Das kann man schon so machen, aber man muss dann halt noch placement new für die einzelnen Elemente aufrufen.



  • Badestrand schrieb:

    Ich weiß gar nicht, ob es zu memset überhaut eine Alternative gibt, von daher kann man das ruhig verwenden..

    fill() aus <algorithm>
    🙂



  • gast_yx schrieb:

    Hallo,

    ich habe nur eine kurze Frage:

    Ist es evtl. gegen coding conventions wenn man malloc/calloc/memset in C++ benutzt? ...

    _alloc() würde ich nur mit guter Begründung einsetzen (z.B. wenn man einen Speicherhandler schreibt), memset() finde ich OK für "Bytefummeleien".

    Ansonsten spricht IMO nichts gegen new und new[].

    Gruß,

    Simon2.



  • Gegen Coding Conventions verstösst man mit jeder Zeile die man schreibt... zumindest gegen irgendwelche Coding Conventions von irgendwem 😃


Anmelden zum Antworten