Reddit - cpp - În cazul în care structurile mele de clasă au constructori impliciti
Poate. O să mă gândesc puțin data viitoare când voi întâlni situația și mă voi întoarce la tine.

Acesta este un simptom al faptului că C ++ nu vă permite să declarați și să inițializați obiecte separat (precum și, eventual, un design prost). Există și alte limbi în care acest lucru nu este cazul.
Nu cred că are sens ca varianta sau tuplul (și prin extensie, perechea) să aibă constructori impliciți.
Nu este un obiect neinițializat doar un număr de octeți în memorie ale cărui valori nu înseamnă nimic util în contextul oricărui tip care ar trebui să fie obiectul?
În limbile pe care le-am folosit care permit declarații/inițializări separate, codul dvs. nu se va compila decât dacă compilatorul poate dovedi că nu accesați niciodată un obiect neinițializat.
EDIT: De asemenea, C ++ nu vă permite să aveți obiecte neinitializate non-banale. Doar declararea unui obiect va invoca constructorul său implicit.
EDITARE 2: obiecte neinizializate non-banale
De asemenea, C ++ nu vă permite să aveți obiecte neinițializate
Uh, este în mod evident greșit. Un simplu declarat local int i; este un contra-exemplu. Și, desigur, același lucru este valabil și pentru tipurile banale personalizate.
Nu sunt sigur că aș lua în considerare variabilele obiectelor tipurilor primitive. Ai dreptate când vine vorba de tipuri banale.
Standardul C ++ este clar în acest sens: instanțele tipurilor primitive sunt obiecte (§6.6.2/1). Simplificat, cam orice cu o adresă de memorie și un tip este un obiect în C ++. Excepția notabilă este funcțiile, care nu sunt obiecte, chiar dacă se întâmplă să ocupe stocarea.
Nu se poate contesta cu standardul ¯ \ _ (ツ) _/(.
RAII nu face atât de ușor de manevrat.
Acesta este un simptom al faptului că C ++ nu vă permite să declarați și să inițializați obiecte separat
Am spus același lucru.
Ai dreptate - nu am observat asta la prima citire.
Mulțumiri. Îmi place noțiunea de „stare goală”.
În general, cu cât un obiect are mai multe stări, cu atât este mai greu de raționat. Dacă puteți evita o stare goală, vă sugerez să o faceți. Sunt șanse să aveți un fel de problemă XY și există un alt mod de a rezolva problema, în afară de a avea o stare goală. În schimb, urmărește ca obiectele tale să fie mereu consecvente cu sine. Definiți obiectul prin invarianții săi și asigurați-vă că nicio interfață publică a obiectului nu permite încălcarea acelor invarianți.