C++ Academy · Oppitunti

Olion elinkaari

Milloin oliot luodaan ja tuhotaan

Oppitunti 3/413 vaihetta

Olion elinkaari on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Milloin oliot luodaan

Olion elinkaari alkaa, kun sille on varattu säilytystila ja sen konstruktori on suoritettu loppuun. Siitä lähtien oliota voi käyttää kokonaisuudessaan.

#include <iostream>

struct Widget {
    Widget() { std::cout << "born\n"; }
};

int main() {
    Widget w;   // constructor runs here
}

Milloin oliot tuhoutuvat

Elinkaari päättyy, kun destruktori suoritetaan. Pinossa sijaitsevalle oliolle tämä tapahtuu sen näkyvyysalueen sulkevan aaltosulkeen kohdalla.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget w;
    std::cout << "alive\n";
}   // ~Widget runs here

Luonti- ja tuhoamisjärjestys

Oliot tuhotaan luomisen käänteisessä järjestyksessä. Viimeisenä luotu olio puretaan ensimmäisenä.

#include <iostream>

struct Tag {
    int id;
    Tag(int i) : id(i) { std::cout << "make " << id << "\n"; }
    ~Tag() { std::cout << "drop " << id << "\n"; }
};

int main() {
    Tag a(1);
    Tag b(2);   // dropped before a
}

Automaattinen elinkaari (pino)

Automaattiset oliot elävät niitä ympäröivän lohkon ajan. Tämä on yleisin ja turvallisin elinkaarimalli.

Dynaaminen elinkaari (keko)

new-operaattorilla luodut keko-oliot säilyvät, kunnes delete-operaattoria kutsutaan — niiden elinkaarta hallitsette te, ei näkyvyysalue.

#include <iostream>

struct Widget {
    ~Widget() { std::cout << "dies\n"; }
};

int main() {
    Widget* w = new Widget();
    std::cout << "still alive\n";
    delete w;   // destructor runs here
}

Staattinen elinkaari

static-säilytystilassa olevat oliot elävät koko ohjelman ajan. Funktiokohtainen static-olio luodaan ensimmäisellä käyttökerralla.

#include <iostream>

int next() {
    static int counter = 0;   // built once
    return ++counter;
}

int main() {
    std::cout << next() << next() << next() << "\n";
}

Väliaikaiset oliot

Lausekkeessa luotu väliaikainen olio tuhoutuu yleensä koko lausekkeen lopussa (puolipisteeseen päädyttäessä).

#include <iostream>
#include <string>

int main() {
    std::cout << (std::string("a") + "b") << "\n";
}   // temporary string dies after this line

Jäsenet luodaan ennen runkoa

Luokan jäsenoliot luodaan ennen ympäröivän olion konstruktorin rungon suorittamista ja tuhotaan sen destruktorin rungon jälkeen.

#include <iostream>
#include <string>

struct Engine { Engine() { std::cout << "engine\n"; } };
struct Car {
    Engine e;
    Car() { std::cout << "car\n"; }
};

int main() { Car c; }

Elinkaaren pidentäminen const-viitteellä

Kun väliaikainen olio sidotaan const&-viitteeseen, sen elinkaari pitenee viitteen elinkaaren mittaiseksi — tämä on hyödyllinen C++-sääntö.

#include <iostream>
#include <string>

int main() {
    const std::string& s = std::string("hi");
    std::cout << s << "\n";   // s still valid
}

Käyttö elinkaaren päättymisen jälkeen

Olion käsitteleminen sen elinkaaren päätyttyä aiheuttaa määrittelemätöntä toimintaa — kyseessä on klassinen roikkuva viite tai vapautuksen jälkeinen käyttö -virhe.

Elinkaari mahdollistaa RAII:n

Koska destruktorit suoritetaan deterministisesti elinkaaren päättyessä, C++ sitoo resurssien vapautuksen elinkaareen. Tämä on RAII:n perusta, jota käsitellään seuraavalla kurssilla.

Pikatesti

Testatkaa ymmärrystänne olioiden elinkaaresta.

Kertaus

Opitte, että olion elinkaari alkaa konstruktion jälkeen ja päättyy tuhoamiseen. Automaattiset oliot noudattavat näkyvyysaluetta, dynaamiset oliot new/delete-operaattoreita, ja staattiset oliot säilyvät koko ohjelman ajan. Oliot tuhotaan käänteisessä järjestyksessä — tämä on RAII:n perusta.

Aloita maksutta

Opi C++ tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Olion elinkaari” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Olion elinkaari”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Olion elinkaari”?

Milloin oliot luodaan ja tuhotaan Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Olion elinkaari”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?

Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pinovaraukset
  2. Keon varaus new/delete-operaatioilla
  3. Olion elinkaari
  4. Yleiset muistivirheet
← Takaisin: C++ Academy