Care este diferența față de exemplul constructorului de copiat și constructorul de suprapunere a stivei

Să presupunem că avem o clasă cu un constructor obișnuit:

Și să presupunem că am adăugat constructorul de copiat și mutați (muta) constructor:

Există o singură nuanță: constructorul de copiere nu va copia, ci va efectua și transferul.







Care este diferența atunci? Dacă, de fapt, se întâmplă același lucru. Codul :: Blocuri dă diferența în secunde. Cred că atunci apare întrebarea dintre utilizarea lui și .

din 29 ianuarie '16 la 14:20

Variabilă cu tipul T poate lua doar o expresie de valoare r,
variabilă de tip T poate accepta expresii non-constante de valoare l.
Nu contează ce este variabila - argumentul constructorului sau nu.







În consecință, diferența dintre SomeClass (SomeClass altele) și SomeClass (SomeClass altele) - numai că prima va fi numită numai pentru expresiile de valoare r, iar a doua - numai pentru expresiile non-constante ale valorii l.
În acest caz, nici unul dintre ei nu poate lua const SomeClass .

răspuns dat dat 29 ianuarie '16 la 17:11

Semnătura corectă a constructorului de copiat este:

răspunsul dat 29 ianuarie '16 la 14:38

Orice constructor non-șablon care are o referință la clasă este constructorul copie al acestei clase. Indiferent de prezența sau absența const și / sau volatile. - alexolut 29 ianuarie '16 la 14:51

Care este profitul atunci?

Referințele pentru valorile de referință permit programatorilor să evite copierea logică inutilă și să ofere posibilitatea unei redirecționări perfecte. În primul rând, ele sunt destinate utilizării în proiecte de înaltă performanță și biblioteci.

răspuns dat dat 29 ianuarie '16 la 17:22







Trimiteți-le prietenilor: