Avatar
Denis Homolík (Alfonz):

Zdravím, nevím jak je to přesně s předáváním objektu jako parametr. A hlavně mě zajímá rozdíl mezi Object* a Object&. Budu rád za případné odpovědi :)

void foo(Object object) { } //Tady by se měl objekt zkopírovat a jeho změny by neměli ovlivnit původní
void foo(Object* object) { } //Tady si nejsem jist, jen se místo . používá -> a změny se projeví i na původním
void foo(Object& object) { } //Tady by se změny měli promítnout i na původním
Odpovědět 5. března 15:23
Vše je možné, dokud si to myslíte!
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Denis Homolík (Alfonz)
Filip Šohajek:

U pointeru (prostřední případ) je to velmi podobné jak u referencí (poslední případ).
Pointer narozdíl od reference zabírá místo v paměti (4 byty u 32-bit, 8 bytů u 64-bit). Reference je totiž přímý ukazatel do paměti, nahrazený kompilátorem při kompilaci.
Pointery můžou nabývat NULL, reference ne.
Na referencích nemůžeš provádět pointerovou aritmetiku.
A samozřejmě je tam lepší podpora pro RAII.

Editováno 5. března 15:32
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +2 5. března 15:31
Avatar
Nahoru Odpovědět 5. března 15:33
Vše je možné, dokud si to myslíte!
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Denis Homolík (Alfonz)
Taskkill:

doplnim, rozdil je hlavne v tomhle: kdyz predavas funkci pointer predavas ukazatel na misto v pameti, ktere skutecne zabira ten objekt, je to otravny, musis to soustavne dereferencovat a kdyz nahodou zapomenes tak to padne .. .takze v C++ prisly reference, dobry na tom je, ze kdyz pouzijes referenci, muzes se k tomu objektu (datovymu typu) chovat jako by tam skutecne byl a nemusis ho dereferencovat, kdyz chces nad nim neco provest ...

reference jsou tedy pohodlnejsi a vyplati se je pouzit, kde to jde

(vim o tom, ze cast veci uz rekl Filip, ale mel jsem potrebu zminit ten rozdil v praktickem pouzivani)

 
Nahoru Odpovědět  +3 5. března 21:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.