C++:n move-semantiikan esittely : C++11:ssa julkaistu ominaisuus
Salla, Rasmus (2019)
Salla, Rasmus
2019
Tieto- ja sähkötekniikan TkK tutkinto-ohjelma
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2019-12-18
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-201912166948
https://urn.fi/URN:NBN:fi:tuni-201912166948
Tiivistelmä
Kandidaatintyön päätavoitteena on esitellä lukijalle, mitä C++:n aihe move-semantiikka pitää sisällään ja ennen kaikkea, miten move-semantiikkaa voi hyödyntää omassa C++-koodissa. Esitellyssä on hyödynnetty runsaasti koodiesimerkkejä, ja vaikka esittely kulkee välillä erittäin syvällä move-semantiikan teoriassa, on teksti kirjoitettu niin, että C++:n perusteet osaava henkilö voi sen ymmärtää.
Kandidaatintyö perustuu suurimmilta osin uusimpaan valmiiseen C++17-standardiin. Laaja osa työn sisällöstä pätee kuitenkin myös C++11:een lukuunottamatta muutamia C++17:n ominaisuuksia, jotka esitellään työssä erikseen.
Move-semantiikka on vuonna 2011 C++11-standardin mukana julkaistu ominaisuus. Move-semantiikalla tarkoitetaan käsitteenä kaikkea sitä, minkä avulla kääntäjä pystyy korvaamaan kalliit kopio-operaatiot halvemmilla siirto-operaatioilla. Siirtäminen taas tarkoittaa olion tilan siirtämistä uuden samanlaisen olion haltuun. Usein tämä tehdään varastamalla olion resurssit, eli ottamalla resurssiin osoittava osoitin uuden olion haltuun. Siirtämisellä siis vältetään olion turhaa kopioimista, vaikkakin sen jälkeen siirretty olio jää usein täsmentämättömään tilaan, koska olion data siirretään sen omistuksesta pois. Tämän vuoksi siirtäminen sopii erityisen hyvin väliaikaisille olioille, joiden elinikä on lähes poikkeuksetta lyhyt.
Tekstin luettua lukija osaa erotella rvaluet ja lvaluet sekä rvalue-viitteet, viitteet ja forwardoivat viitteet toisistaan. Lukija myös ymmärtää, mitä olioiden siirtämisellä tarkoitetaan, ja miten rvalue- ja lvalue-oliota siirretään. Lisäksi lukija tietää, miten move-rakentaja ja move-sijoitusoperaattori määritetään luokalle.
Kandidaatintyö perustuu suurimmilta osin uusimpaan valmiiseen C++17-standardiin. Laaja osa työn sisällöstä pätee kuitenkin myös C++11:een lukuunottamatta muutamia C++17:n ominaisuuksia, jotka esitellään työssä erikseen.
Move-semantiikka on vuonna 2011 C++11-standardin mukana julkaistu ominaisuus. Move-semantiikalla tarkoitetaan käsitteenä kaikkea sitä, minkä avulla kääntäjä pystyy korvaamaan kalliit kopio-operaatiot halvemmilla siirto-operaatioilla. Siirtäminen taas tarkoittaa olion tilan siirtämistä uuden samanlaisen olion haltuun. Usein tämä tehdään varastamalla olion resurssit, eli ottamalla resurssiin osoittava osoitin uuden olion haltuun. Siirtämisellä siis vältetään olion turhaa kopioimista, vaikkakin sen jälkeen siirretty olio jää usein täsmentämättömään tilaan, koska olion data siirretään sen omistuksesta pois. Tämän vuoksi siirtäminen sopii erityisen hyvin väliaikaisille olioille, joiden elinikä on lähes poikkeuksetta lyhyt.
Tekstin luettua lukija osaa erotella rvaluet ja lvaluet sekä rvalue-viitteet, viitteet ja forwardoivat viitteet toisistaan. Lukija myös ymmärtää, mitä olioiden siirtämisellä tarkoitetaan, ja miten rvalue- ja lvalue-oliota siirretään. Lisäksi lukija tietää, miten move-rakentaja ja move-sijoitusoperaattori määritetään luokalle.
Kokoelmat
- Kandidaatintutkielmat [8261]