Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Miten C++:lla kirjoitetaan roskakerättyä koodia?

mavavilj [12.03.2024 12:13:38]

#

Miten C++:lla kirjoitetaan roskakerättyä koodia?

Smart pointer:sit yms.

Metabolix [12.03.2024 15:40:08]

#

Roskienkeräys tarkoittaa yleensä sitä, että erillinen roskienkerääjä käy joillain ehdoilla läpi muistialueet ja vapauttaa käytöstä poistuneet. C++23 ei sisällä tällaista roskienkeräystä.

C++ sisältää luokan shared_ptr, joka toimii niin, että kun viimeinen samaan muistialueeseen osoittava shared_ptr tuhoutuu, muistialue vapautetaan. Kun osoittimesta on tehty shared_ptr, kyseinen shared_ptr ja sen kopiot ovat vastuussa vapauttamisesta. Toinen riippumaton shared_ptr samasta osoittimesta on kielletty.

C++ sisältää luokan weak_ptr, johon voi tallettaa shared_ptr:n mutta joka ei estä muistin vapauttamista. Tällä voi välttää sykliset shared_ptr-viittaukset, jotka muuten estäisivät muistin automaattisen vapauttamisen.

C++ sisältää luokan unique_ptr, joka on vähän kuin shared_ptr mutta sallii vain yhden samanaikaisen omistajan, eli jos arvon sijoittaa toiseen osoittimeen, ensimmäinen tyhjenee.

mavavilj [12.03.2024 17:33:11]

#

Mutta eikös GC:n suurin etu ole scopetettujen asioiden kanssa? Ja silloin se on myös tehokkain.

Ajattelin, että jos voisi kirjoittaa C++:aa ilman manuaalista hallintaa siten, että suunnittelee vaan scopet hyvin.

jlaire [12.03.2024 17:44:38]

#

mavavilj kirjoitti:

Ajattelin, että jos voisi kirjoittaa C++:aa ilman manuaalista hallintaa siten, että suunnittelee vaan scopet hyvin.

Tervetuloa tälle vuosituhannelle. RAII on kuitenkin eri asia kuin roskienkeräys.

mavavilj [12.03.2024 17:48:17]

#

jlaire kirjoitti:

mavavilj kirjoitti:

Ajattelin, että jos voisi kirjoittaa C++:aa ilman manuaalista hallintaa siten, että suunnittelee vaan scopet hyvin.

Tervetuloa tälle vuosituhannelle. RAII on kuitenkin eri asia kuin roskienkeräys.

Niin ja sitten mietimme, miksi tarvitaan roskienkerääjää?

Eli miltä näyttää C++, joka on Javamaista?

mpni [12.03.2024 20:09:05]

#

Eikös Valgrind ole kätevä etsimään noita muistivuotoja koodista(?):
https://valgrind.org/

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta