Problem mit operator new


  • Mod

    314159265358979 schrieb:

    camper schrieb:

    construct(pointer p, const T& t) { new(static_cast<void*>(p)) T(t); }
    

    Nach void* kann implizit gecastet werden, daher ist dieser Cast nicht nötig.

    "impliziter cast" ist schon mal ein Widerspruch in sich. Ein Cast ist immer explizit, schließlich handelt es sich um eine bestimmte grammatikalische Form.
    Ein Konvertierung kann implizit sein, und natürlich können Objektzeiger implizit in void* konvertiert werden.
    Der Cast hier dient dazu, garantiert die Standardversion des placement new (die nicht ersetzt werden darf) aufzurufen. Schließlich wäre es denkbar, dass für ein T eine placement-new-Funktion etwa der Signatur

    operator new(size_t,T*)
    

    existiert.



  • @314159265358979:
    Tip: wenn camper was schreibt, macht es tendenziell eher Sinn zu fragen was der Sinn ist, als zu behaupten dass es unnötig wäre 😉



  • hustbaer schrieb:

    Tip: wenn camper was schreibt, macht es tendenziell eher Sinn zu fragen was der Sinn ist, als zu behaupten dass es unnötig wäre 😉

    An manchen Stellen, wo ich nicht sicher bin was der Standard vorschreibt/verbietet, würd ich im Code einfach gerne folgendes schreiben:

    using std::camper;
    

    😉


Anmelden zum Antworten