Olion elinkaari
Milloin oliot luodaan ja tuhotaan
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 hereLuonti- 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 lineJä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.
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.