Geek tričko zdarma Python týden
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Pouze tento sleva až 80% na kurzy Python
Avatar
Tomáš Hanzelka:2.11.2018 13:13

Snažím se pochopit struktury a není mi moc jasné jaký je rozdíl v tom když určitou strukturu inicializuji pomocí konstruktoru nebo klasicky jak je uvedeno v příloze. Opravte mě, jestli to chápu úplně špatně.
Prosím o vysvětlení po lopatě. :)

Zkusil jsem: Číst prezentaci ze školy minimálně 10x :D

Chci docílit: Pochopit základ struktur.

 
Odpovědět 2.11.2018 13:13
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Tomáš Hanzelka
Petr Štechmüller:2.11.2018 13:32

Ahoj, hlavní rozdíl je v jaké paměti tu proměnnou inicializuješ. Pomocí new vytvoříš proměnnou na haldě, zatím co ten druhý příklad ji vytvoří na stacku. Dále je rozdíl v mazání přidělené paměti. Když vytvoříš instancí struktury na haldě, tak ji musíš opět příkazem delete smazat, jinak budou vznikat memory leaky. Proměnná inicializována na stacku se "automaticky" smaže na konci scope, ve kterém byla vytvořena.

Nahoru Odpovědět  -1 2.11.2018 13:32
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Petr Štechmüller
Erik Šťastný:2.11.2018 13:46

Řeč je o .NET a ne o C++, žádné delete řešit nemusíš.

Ještě bych dodal, že z hlediska funkce v tomto případě není rozdíl.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 2.11.2018 13:46
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Erik Šťastný
Petr Štechmüller:2.11.2018 13:46

UPS, to jsem přehlédl

Nahoru Odpovědět 2.11.2018 13:46
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Tomáš Hanzelka:2.11.2018 16:39

Děkuji za odpovědi. Na haldě rozumíme jako na RAM a na stacku asi jako zásobníku? Jaká paměť je teda zásobník?

 
Nahoru Odpovědět 2.11.2018 16:39
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Tomáš Hanzelka
patrik.valkovic:2.11.2018 17:37

To jsou věci v C++, to v C# řešit nemusíš. Ony jsou obě paměti v RAM, jen se s nimi zachází rozdílně. Jinak rozdíl mezi inicializací konstruktoru bez parametrů a klasickou inicializací žádný rozdíl není.

Nahoru Odpovědět  +1 2.11.2018 17:37
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
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 6 zpráv z 6.