Avatar von Urfahraner Auge
  • Urfahraner Auge

mehr als 1000 Beiträge seit 26.04.2004

Re: noinit und etwas OT

pre alpha schrieb am 29.07.2020 22:29:

Warum verwendest Du nicht einfach immer Fall 1?

Ich kann nicht garanieren daß dieser Fall immer eingehalten wird

Du kannst

c = a + b

verhindern, indem Du den entsprechenden operator= auf "=delete" setzt (so wie es z.B. auch std::unique_ptr macht)

und dann bei "falscher" Benutzung lahmer Code bei rauskommt.

Bei "falscher" Benutzung kann noch viel Schlimmeres passieren als lahmer Code.
Fall 1

array_t c = a + b

ist nicht nur schneller, sondern auch sicherer (weil funktionaler Stil / ohne potentiell unerwünschte Seiteneffekte)

https://www.boost.org/doc/libs/1_73_0/libs/core/doc/html/core/noinit_adaptor.html

Das betrifft nur dynamische Container. Die ganze Problemklasse tritt dort gar nicht auf da move-ctor und -assigment verfügbar sind. Ich benötige aber für meinen Anwendungsfall unbedingt std::array.

Nicht-statische std::array<T,N> werden für elementare T eh nicht initialisiert, siehe

https://www.heise.de/forum/heise-Developer/Kommentare/Die-Loesung-des-Static-Initialization-Order-Fiasco-mit-C-20/Re-noinit-und-etwas-OT/posting-37101685/show/

Bewerten
- +