Diskuze: Problém s ukázkovým kódem.
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Protože sis operátor = (přiřazení) přetížil a tam máš jen překopírování těch hodnot, ne těch ukazatelů.
Aha, chápu to tedy správně že objekt fousek se předá jako parametr do té funkce s přetížením, jeho vek,váha se přiřadí do ukazatelů objektu micka vekKocky,vahaKocky a ty se pak vrátí do objektu micka takže se ty staré hodnoty jen přepíší novými?
fousek = micka;
KOCKA & KOCKA::operator=(const KOCKA & ptr) // ptr je micka, this je fousek
{
if (this == &ptr) // pokud micka a fousek jsou totozni, jen vratime ukazatel
return *this;
*vekKocky = ptr.ZiskejVek(); // na misto, kam ukazuje fouskuv (mohlo by to byt napsano i s this) vekKocky se ulozi hodnota ziskana z vekKocky micky, uklada se jen ta hodnota, s ukazately se nijak nehybe, to by tu musel byt kod: vekKocky = ptr.ZiskejUkazatelNaVek(); a musel by jsi tu metodu vracejici ukazatel na vek samozrejme dopsat
*vahaKocky = ptr.ZiskejVahu(); // to same s vahou
return *this; // vrati se ukazatel na fouska
}
Nevím, kdo ten kód vymýšlel, ale nějak mi není jasný důvod toho, proč vekKocky a vahaKocky jsou pointery a ne obyčejné proměnné. Každopádně tam chybí destruktor pro dealokaci paměti, takže po zániku každého objektu třídy KOCKA automaticky vznikne memory leak.
Zobrazeno 7 zpráv z 7.